Overview
TokenID
1564
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ChillBears
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-05 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.7; // File: contracts/Ownable.sol /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. * * Source: openzeppelin */ abstract contract Ownable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(msg.sender); } /** * @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() == msg.sender, "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() external 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) external 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); } } // File: Strings.sol /** * Source: Openzeppelin */ /** * @dev String operations. */ library Strings { /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } } // File: ECDSA.sol // OpenZeppelin Contracts v4.4.0 (utils/cryptography/ECDSA.sol) /** * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. * * These functions can be used to verify that a message was signed by the holder * of the private keys of a given address. */ library ECDSA { /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature` or error string. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. * * Documentation for signature generation: * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js] * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers] * * _Available since v4.3._ */ function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address) { // Check the signature length // - case 65: r,s,v signature (standard) // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._ if (signature.length == 65) { bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } return tryRecover(hash, v, r, s); } else if (signature.length == 64) { bytes32 r; bytes32 vs; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) vs := mload(add(signature, 0x40)) } return tryRecover(hash, r, vs); } else { return (address(0)); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { (address recovered) = tryRecover(hash, signature); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately. * * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures] * * _Available since v4.3._ */ function tryRecover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address) { bytes32 s; uint8 v; assembly { s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) v := add(shr(255, vs), 27) } return tryRecover(hash, v, r, s); } /** * @dev Overload of {ECDSA-tryRecover} that receives the `v`, * `r` and `s` signature fields separately. * * _Available since v4.3._ */ function tryRecover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address) { // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { return (address(0)); } if (v != 27 && v != 28) { return (address(0)); } // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); if (signer == address(0)) { return (address(0)); } return (signer); } /** * @dev Returns an Ethereum Signed Message, created from a `hash`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { // 32 is the length in bytes of hash, // enforced by the type signature above return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } } // File: Address.sol /** * Source: Openzeppelin */ /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } } // File: IERC721Receiver.sol /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: IERC165.sol // https://eips.ethereum.org/EIPS/eip-165 interface IERC165 { /// @notice Query if a contract implements an interface /// @param interfaceID The interface identifier, as specified in ERC-165 /// @dev Interface identification is specified in ERC-165. This function /// uses less than 30,000 gas. /// @return `true` if the contract implements `interfaceID` and /// `interfaceID` is not 0xffffffff, `false` otherwise function supportsInterface(bytes4 interfaceID) external view returns (bool); } // File: IERC2981.sol /** * Source: Openzeppelin */ /** * @dev Interface for the NFT Royalty Standard */ interface IERC2981 is IERC165 { /** * @dev Called with the sale price to determine how much royalty is owed and to whom. * @param tokenId - the NFT asset queried for royalty information * @param salePrice - the sale price of the NFT asset specified by `tokenId` * @return receiver - address of who should be sent the royalty payment * @return royaltyAmount - the royalty payment amount for `salePrice` */ function royaltyInfo(uint256 tokenId, uint256 salePrice) external view returns (address receiver, uint256 royaltyAmount); } // File: ERC165.sol /** * Source: Openzeppelin */ /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: IERC721.sol // https://eips.ethereum.org/EIPS/eip-721, http://erc721.org/ /// @title ERC-721 Non-Fungible Token Standard /// @dev See https://eips.ethereum.org/EIPS/eip-721 /// Note: the ERC-165 identifier for this interface is 0x80ac58cd. interface IERC721 is IERC165 { /// @dev This emits when ownership of any NFT changes by any mechanism. /// This event emits when NFTs are created (`from` == 0) and destroyed /// (`to` == 0). Exception: during contract creation, any number of NFTs /// may be created and assigned without emitting Transfer. At the time of /// any transfer, the approved address for that NFT (if any) is reset to none. event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId); /// @dev This emits when the approved address for an NFT is changed or /// reaffirmed. The zero address indicates there is no approved address. /// When a Transfer event emits, this also indicates that the approved /// address for that NFT (if any) is reset to none. event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId); /// @dev This emits when an operator is enabled or disabled for an owner. /// The operator can manage all NFTs of the owner. event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved); /// @notice Count all NFTs assigned to an owner /// @dev NFTs assigned to the zero address are considered invalid, and this /// function throws for queries about the zero address. /// @param _owner An address for whom to query the balance /// @return The number of NFTs owned by `_owner`, possibly zero function balanceOf(address _owner) external view returns (uint256); /// @notice Find the owner of an NFT /// @dev NFTs assigned to zero address are considered invalid, and queries /// about them do throw. /// @param _tokenId The identifier for an NFT /// @return The address of the owner of the NFT function ownerOf(uint256 _tokenId) external view returns (address); /// @notice Transfers the ownership of an NFT from one address to another address /// @dev Throws unless `msg.sender` is the current owner, an authorized /// operator, or the approved address for this NFT. Throws if `_from` is /// not the current owner. Throws if `_to` is the zero address. Throws if /// `_tokenId` is not a valid NFT. When transfer is complete, this function /// checks if `_to` is a smart contract (code size > 0). If so, it calls /// `onERC721Received` on `_to` and throws if the return value is not /// `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`. /// @param _from The current owner of the NFT /// @param _to The new owner /// @param _tokenId The NFT to transfer /// @param data Additional data with no specified format, sent in call to `_to` function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes memory data) external; /// @notice Transfers the ownership of an NFT from one address to another address /// @dev This works identically to the other function with an extra data parameter, /// except this function just sets data to "". /// @param _from The current owner of the NFT /// @param _to The new owner /// @param _tokenId The NFT to transfer function safeTransferFrom(address _from, address _to, uint256 _tokenId) external; /// @notice Transfer ownership of an NFT -- THE CALLER IS RESPONSIBLE /// TO CONFIRM THAT `_to` IS CAPABLE OF RECEIVING NFTS OR ELSE /// THEY MAY BE PERMANENTLY LOST /// @dev Throws unless `msg.sender` is the current owner, an authorized /// operator, or the approved address for this NFT. Throws if `_from` is /// not the current owner. Throws if `_to` is the zero address. Throws if /// `_tokenId` is not a valid NFT. /// @param _from The current owner of the NFT /// @param _to The new owner /// @param _tokenId The NFT to transfer function transferFrom(address _from, address _to, uint256 _tokenId) external; /// @notice Change or reaffirm the approved address for an NFT /// @dev The zero address indicates there is no approved address. /// Throws unless `msg.sender` is the current NFT owner, or an authorized /// operator of the current owner. /// @param _approved The new approved NFT controller /// @param _tokenId The NFT to approve function approve(address _approved, uint256 _tokenId) external; /// @notice Enable or disable approval for a third party ("operator") to manage /// all of `msg.sender`'s assets /// @dev Emits the ApprovalForAll event. The contract MUST allow /// multiple operators per owner. /// @param _operator Address to add to the set of authorized operators /// @param _approved True if the operator is approved, false to revoke approval function setApprovalForAll(address _operator, bool _approved) external; /// @notice Get the approved address for a single NFT /// @dev Throws if `_tokenId` is not a valid NFT. /// @param _tokenId The NFT to find the approved address for /// @return The approved address for this NFT, or the zero address if there is none function getApproved(uint256 _tokenId) external view returns (address); /// @notice Query if an address is an authorized operator for another address /// @param _owner The address that owns the NFTs /// @param _operator The address that acts on behalf of the owner /// @return True if `_operator` is an approved operator for `_owner`, false otherwise function isApprovedForAll(address _owner, address _operator) external view returns (bool); } // File: IERC721Metadata.sol /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: ERC721.sol /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension * Made for efficiancy! */ contract ERC721 is ERC165, IERC721, IERC721Metadata, Ownable { using Address for address; using Strings for uint256; uint16 public totalSupply; address public proxyRegistryAddress; string public baseURI; // Mapping from token ID to owner address mapping(uint256 => address) internal _owners; // Mapping owner address to token count mapping(address => uint256) internal _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(address _openseaProxyRegistry, string memory _baseURI) { proxyRegistryAddress = _openseaProxyRegistry; baseURI = _baseURI; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) external view override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() external pure override returns (string memory) { return "Chill Bear Club"; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() external pure override returns (string memory) { return "CBC"; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) external view override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); return string(abi.encodePacked(baseURI, tokenId.toString(), ".json")); } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) external override { address owner = _owners[tokenId]; require(to != owner, "ERC721: approval to current owner"); require( msg.sender == owner || isApprovedForAll(owner, msg.sender), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) external override { _setApprovalForAll(msg.sender, operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view override returns (bool) { // Whitelist OpenSea proxy contract for easy trading. ProxyRegistry proxyRegistry = ProxyRegistry(proxyRegistryAddress); if (address(proxyRegistry.proxies(owner)) == operator) { return true; } return _operatorApprovals[owner][operator]; } function setOpenseaProxyRegistry(address addr) external onlyOwner { proxyRegistryAddress = addr; } function setBaseURI(string calldata _baseURI) external onlyOwner { baseURI = _baseURI; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) external override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(msg.sender, tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { require(_isApprovedOrOwner(msg.sender, tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = _owners[tokenId]; return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint2(address to) internal { uint tokenId = totalSupply; _balances[to] += 2; for (uint i; i < 2; i++) { tokenId++; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } totalSupply += 2; require( _checkOnERC721Received(address(0), to, tokenId, ""), "ERC721: transfer to non ERC721Receiver implementer" ); // checking it once will make sure that the address can recieve NFTs } function _mint1(address to) internal { uint tokenId = totalSupply + 1; _balances[to]++; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); totalSupply++; require( _checkOnERC721Received(address(0), to, tokenId, ""), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(_owners[tokenId] == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from]--; _balances[to]++; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(msg.sender, 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; } } } contract OwnableDelegateProxy {} contract ProxyRegistry { mapping(address => OwnableDelegateProxy) public proxies; } // File: ChillBears.sol contract ChillBears is IERC2981, ERC721 { bool private _onlyWhitelist; bool private _onlyOg; bool private _mintingEnabled; uint private _preMintSupply; uint private _publicSaleSupply; uint private _ogPrice; uint private _preSalePrice; uint private _publicSalePrice; uint private _EIP2981RoyaltyPercentage; mapping(address => uint) amountMinted; event OgPriceChanged(uint indexed prevPrice, uint indexed newPrice); event PreSalePriceChanged(uint indexed prevPrice, uint indexed newPrice); event PublicSalePriceChanged(uint indexed prevPrice, uint indexed newPrice); event PreSaleSupplyChanged(uint indexed prevSupply, uint indexed newSupply); event PublicSaleSupplyChanged(uint indexed prevSupply, uint indexed newSupply); event EIP2981RoyaltyPercentageChanged(uint indexed prevRoyalty, uint indexed newRoyalty); constructor( address _openseaProxyRegistry, uint preMintSupply, uint publicSaleSupply, uint publicSalePrice, uint ogPrice, uint preSalePrice, uint EIP2981RoyaltyPercentage, string memory _baseURI ) ERC721(_openseaProxyRegistry, _baseURI) { require(EIP2981RoyaltyPercentage <= 1000, "royalty cannot be more than 10 percent"); _EIP2981RoyaltyPercentage = EIP2981RoyaltyPercentage; require(preMintSupply + publicSaleSupply == 5555, "Supply has to be 5555"); _preMintSupply = preMintSupply; _publicSaleSupply = publicSaleSupply; _preSalePrice = preSalePrice; _ogPrice = ogPrice; _publicSalePrice = publicSalePrice; } function mintFromReserve(address to) external onlyOwner { require(totalSupply < 1); _mint1(to); } function getMintingInfo() external view returns( uint preMintSupply, uint publicSaleSupply, uint publicSalePrice, uint ogPrice, uint preSalePrice, uint EIP2981RoyaltyPercentage ) { preMintSupply = _preMintSupply; publicSaleSupply = _publicSaleSupply; preSalePrice = _preSalePrice; ogPrice = _ogPrice; publicSalePrice = _publicSalePrice; EIP2981RoyaltyPercentage = _EIP2981RoyaltyPercentage; } /** * @notice make sure you get the numbers correctly * NOTE: adding tokens to the pre mint supply enceases the max total supply, to keep the total supply the same, make sure to change the public sale supply */ function setPreMintSupply(uint supply) external onlyOwner { require(supply + _publicSaleSupply <= 5555, "Total supply can't be > 5555"); uint prev = _preMintSupply; _preMintSupply = supply; emit PreSaleSupplyChanged(prev, supply); } /** * @notice make sure you get the numbers correctly */ function setPublicMintSupply(uint supply) external onlyOwner { require(_preMintSupply + supply <= 5555, "Total supply can't be > 5555"); uint prev = _publicSaleSupply; _publicSaleSupply = supply; emit PublicSaleSupplyChanged(prev, supply); } function setOgMintPrice(uint priceInWei) external onlyOwner { uint prev = _ogPrice; _ogPrice = priceInWei; emit OgPriceChanged(prev, priceInWei); } function setPreSalePrice(uint priceInWei) external onlyOwner { uint prev = _preSalePrice; _preSalePrice = priceInWei; emit PreSalePriceChanged(prev, priceInWei); } function setPublicSalePrice(uint priceInWei) external onlyOwner { uint prev = _publicSalePrice; _publicSalePrice = priceInWei; emit PublicSalePriceChanged(prev, priceInWei); } /** * @notice In basis points (parts per 10K). Eg. 500 = 5% */ function setEIP2981RoyaltyPercentage(uint percentage) external onlyOwner { require(percentage <= 1000, "royalty cannot be more than 10 percent"); uint prev = _EIP2981RoyaltyPercentage; _EIP2981RoyaltyPercentage = percentage; emit EIP2981RoyaltyPercentageChanged(prev, percentage); } modifier mintFunc(uint maxMintSupply, uint price) { require(maxMintSupply > 0, "Request exceeds max supply!"); require(msg.value == price, "ETH Amount is not correct!"); _; } function mint() external payable mintFunc(_publicSaleSupply, _publicSalePrice) { require(_mintingEnabled, "Minting is not enabled!"); require(amountMinted[msg.sender] == 0, "Can't mint more than 1 token!"); _publicSaleSupply--; amountMinted[msg.sender]++; _mint1(msg.sender); } function preMint(bytes calldata sig) external payable mintFunc(_preMintSupply, _preSalePrice) { require(_onlyWhitelist, "Pre sale is not enabled!"); require(_isWhitelisted(msg.sender, sig), "User not whitelisted!"); require(amountMinted[msg.sender] == 0, "Can't mint more than 1 token!"); _preMintSupply--; amountMinted[msg.sender]++; _mint1(msg.sender); } function ogMint(bytes calldata sig, uint amount) external payable mintFunc(_preMintSupply - amount - 1, _ogPrice * amount) { _ogMint(sig); require(amountMinted[msg.sender] + amount < 3, "Can't mint more than 2 tokens!"); _preMintSupply -= amount; amountMinted[msg.sender] += amount; for (uint i; i < amount; i++) { _mint1(msg.sender); } } function _ogMint(bytes calldata sig) private view { require(_onlyOg, "Og minting is not enabled!"); require(_isOG(msg.sender, sig), "User not OG!"); } function _isOG(address _wallet, bytes memory _signature) private view returns(bool) { return ECDSA.recover( ECDSA.toEthSignedMessageHash(keccak256(abi.encodePacked(_wallet, "OG"))), _signature ) == owner(); } function _isWhitelisted(address _wallet, bytes memory _signature) private view returns(bool) { return ECDSA.recover( ECDSA.toEthSignedMessageHash(keccak256(abi.encodePacked(_wallet))), _signature ) == owner(); } function isWhitelisted(address _wallet, bytes memory _signature) external view returns(bool) { return _isWhitelisted(_wallet, _signature); } function getSalesStatus() external view returns(bool onlyOg, bool onlyWhitelist, bool mintingEnabled) { onlyOg = _onlyOg; onlyWhitelist = _onlyWhitelist; mintingEnabled = _mintingEnabled; } /** * @notice returns royalty info for EIP2981 supporting marketplaces * @dev Called with the sale price to determine how much royalty is owed and to whom. * @param tokenId - the NFT asset queried for royalty information * @param salePrice - the sale price of the NFT asset specified by `tokenId` * @return receiver - address of who should be sent the royalty payment * @return royaltyAmount - the royalty payment amount for `salePrice` */ function royaltyInfo(uint tokenId, uint salePrice) external view override returns(address receiver, uint256 royaltyAmount) { require(_exists(tokenId), "Royality querry for non-existant token!"); return(owner(), salePrice * _EIP2981RoyaltyPercentage / 10000); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC2981).interfaceId || super.supportsInterface(interfaceId); } function withdraw() onlyOwner external { (bool success, ) = payable(msg.sender).call{value: address(this).balance, gas: 2600}(""); require(success, "Failed to withdraw payment!"); } /** * @notice toggles pre sale * @dev enables the pre sale functions. NEVER USE THIS AFTER ENABLING THE PUBLIC SALE FUNCTIONS */ function togglePresale() external onlyOwner { _onlyWhitelist = !_onlyWhitelist; } function toggleOgSale() external onlyOwner { _onlyOg = !_onlyOg; } /** * @notice toggles the public sale * @dev enables/disables public sale functions and disables pre sale functions */ function togglePublicSale() external onlyOwner { _onlyOg = false; _onlyWhitelist = false; _mintingEnabled = !_mintingEnabled; } function tokensOfOwner(address owner) external view returns(uint[] memory) { uint[] memory tokens = new uint[](_balances[owner]); uint y = totalSupply + 1; uint x; for (uint i = 1; i < y; i++) { if (ownerOf(i) == owner) { tokens[x] = i; x++; } } return tokens; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_openseaProxyRegistry","type":"address"},{"internalType":"uint256","name":"preMintSupply","type":"uint256"},{"internalType":"uint256","name":"publicSaleSupply","type":"uint256"},{"internalType":"uint256","name":"publicSalePrice","type":"uint256"},{"internalType":"uint256","name":"ogPrice","type":"uint256"},{"internalType":"uint256","name":"preSalePrice","type":"uint256"},{"internalType":"uint256","name":"EIP2981RoyaltyPercentage","type":"uint256"},{"internalType":"string","name":"_baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":false,"internalType":"bool","name":"_approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"prevRoyalty","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"newRoyalty","type":"uint256"}],"name":"EIP2981RoyaltyPercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"prevPrice","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"OgPriceChanged","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":"uint256","name":"prevPrice","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"PreSalePriceChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"prevSupply","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"newSupply","type":"uint256"}],"name":"PreSaleSupplyChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"prevPrice","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"PublicSalePriceChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"prevSupply","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"newSupply","type":"uint256"}],"name":"PublicSaleSupplyChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMintingInfo","outputs":[{"internalType":"uint256","name":"preMintSupply","type":"uint256"},{"internalType":"uint256","name":"publicSaleSupply","type":"uint256"},{"internalType":"uint256","name":"publicSalePrice","type":"uint256"},{"internalType":"uint256","name":"ogPrice","type":"uint256"},{"internalType":"uint256","name":"preSalePrice","type":"uint256"},{"internalType":"uint256","name":"EIP2981RoyaltyPercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSalesStatus","outputs":[{"internalType":"bool","name":"onlyOg","type":"bool"},{"internalType":"bool","name":"onlyWhitelist","type":"bool"},{"internalType":"bool","name":"mintingEnabled","type":"bool"}],"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":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"mintFromReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes","name":"sig","type":"bytes"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ogMint","outputs":[],"stateMutability":"payable","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":[{"internalType":"bytes","name":"sig","type":"bytes"}],"name":"preMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"proxyRegistryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"royaltyAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percentage","type":"uint256"}],"name":"setEIP2981RoyaltyPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"priceInWei","type":"uint256"}],"name":"setOgMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setOpenseaProxyRegistry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"supply","type":"uint256"}],"name":"setPreMintSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"priceInWei","type":"uint256"}],"name":"setPreSalePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"supply","type":"uint256"}],"name":"setPublicMintSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"priceInWei","type":"uint256"}],"name":"setPublicSalePrice","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":"pure","type":"function"},{"inputs":[],"name":"toggleOgSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"togglePresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"togglePublicSale","outputs":[],"stateMutability":"nonpayable","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":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162003dab38038062003dab833981016040819052620000349162000255565b878162000041336200015f565b600180546001600160a01b0319166001600160a01b038416179055805162000071906002906020840190620001af565b5050506103e8821115620000db5760405162461bcd60e51b815260206004820152602660248201527f726f79616c74792063616e6e6f74206265206d6f7265207468616e2031302070604482015265195c98d95b9d60d21b60648201526084015b60405180910390fd5b600d829055620000ec86886200038e565b6115b3146200013e5760405162461bcd60e51b815260206004820152601560248201527f537570706c792068617320746f206265203535353500000000000000000000006044820152606401620000d2565b5050600894909455600992909255600b92909255600a55600c555062000408565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054620001bd90620003b5565b90600052602060002090601f016020900481019282620001e157600085556200022c565b82601f10620001fc57805160ff19168380011785556200022c565b828001600101855582156200022c579182015b828111156200022c5782518255916020019190600101906200020f565b506200023a9291506200023e565b5090565b5b808211156200023a57600081556001016200023f565b600080600080600080600080610100898b0312156200027357600080fd5b88516001600160a01b03811681146200028b57600080fd5b809850506020808a0151975060408a0151965060608a0151955060808a0151945060a08a0151935060c08a0151925060e08a015160018060401b0380821115620002d457600080fd5b818c0191508c601f830112620002e957600080fd5b815181811115620002fe57620002fe620003f2565b604051601f8201601f19908116603f01168101908382118183101715620003295762000329620003f2565b816040528281528f868487010111156200034257600080fd5b600093505b8284101562000366578484018601518185018701529285019262000347565b82841115620003785760008684830101525b8096505050505050509295985092959890939650565b60008219821115620003b057634e487b7160e01b600052601160045260246000fd5b500190565b600181811c90821680620003ca57607f821691505b60208210811415620003ec57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b61399380620004186000396000f3fe6080604052600436106102bb5760003560e01c8063715018a61161016e578063a7b8e90f116100cb578063c87b56dd1161007f578063e222c7f911610064578063e222c7f914610825578063e985e9c51461083a578063f2fde38b1461085a57600080fd5b8063c87b56dd146107e5578063cd7c03261461080557600080fd5b8063b824ca88116100b0578063b824ca8814610785578063b88d4fde146107a5578063bd2f5244146107c557600080fd5b8063a7b8e90f14610745578063b0413beb1461076557600080fd5b80638462151c116101225780638da5cb5b116101075780638da5cb5b146106c157806395d89b41146106df578063a22cb4651461072557600080fd5b80638462151c146106515780638b2c92ab1461067e57600080fd5b80637d7eee42116101535780637d7eee42146105fe578063801b2eba1461061e57806380ebe00d1461063157600080fd5b8063715018a6146105c9578063791a2519146105de57600080fd5b80632a55205a1161021c578063607019b9116101d05780636c0360eb116101b55780636c0360eb1461053d5780636cafd0df1461055257806370a082311461059b57600080fd5b8063607019b91461050a5780636352211e1461051d57600080fd5b80633ccfd60b116102015780633ccfd60b146104b557806342842e0e146104ca57806355f804b3146104ea57600080fd5b80632a55205a1461046157806334393743146104a057600080fd5b806309e95aba1161027357806318160ddd1161025857806318160ddd146103db5780631f0a8fa71461042157806323b872dd1461044157600080fd5b806309e95aba146103be5780631249c58b146103d357600080fd5b8063081812fc116102a4578063081812fc146103445780630913d9841461037c578063095ea7b31461039e57600080fd5b806301ffc9a7146102c057806306fdde03146102f5575b600080fd5b3480156102cc57600080fd5b506102e06102db366004613384565b61087a565b60405190151581526020015b60405180910390f35b34801561030157600080fd5b5060408051808201909152600f81527f4368696c6c204265617220436c7562000000000000000000000000000000000060208201525b6040516102ec9190613681565b34801561035057600080fd5b5061036461035f366004613469565b6108d6565b6040516001600160a01b0390911681526020016102ec565b34801561038857600080fd5b5061039c610397366004613469565b610981565b005b3480156103aa57600080fd5b5061039c6103b9366004613358565b610a9b565b3480156103ca57600080fd5b5061039c610bca565b61039c610c6d565b3480156103e757600080fd5b5060005461040e9074010000000000000000000000000000000000000000900461ffff1681565b60405161ffff90911681526020016102ec565b34801561042d57600080fd5b506102e061043c366004613308565b610e09565b34801561044d57600080fd5b5061039c61045c366004613228565b610e1c565b34801561046d57600080fd5b5061048161047c366004613482565b610ea3565b604080516001600160a01b0390931683526020830191909152016102ec565b3480156104ac57600080fd5b5061039c610f62565b3480156104c157600080fd5b5061039c610ffd565b3480156104d657600080fd5b5061039c6104e5366004613228565b611106565b3480156104f657600080fd5b5061039c6105053660046133be565b611121565b61039c610518366004613400565b611196565b34801561052957600080fd5b50610364610538366004613469565b61133c565b34801561054957600080fd5b506103376113c7565b34801561055e57600080fd5b50600854600954600b54600a54600c54600d54604080519687526020870195909552938501526060840152608083015260a082015260c0016102ec565b3480156105a757600080fd5b506105bb6105b63660046131d2565b611455565b6040519081526020016102ec565b3480156105d557600080fd5b5061039c6114ef565b3480156105ea57600080fd5b5061039c6105f9366004613469565b611564565b34801561060a57600080fd5b5061039c610619366004613469565b611606565b61039c61062c3660046133be565b6116a8565b34801561063d57600080fd5b5061039c61064c366004613469565b6118cc565b34801561065d57600080fd5b5061067161066c3660046131d2565b6119cd565b6040516102ec919061363d565b34801561068a57600080fd5b506007546040805160ff610100840481161515825280841615156020830152620100009093049092161515908201526060016102ec565b3480156106cd57600080fd5b506000546001600160a01b0316610364565b3480156106eb57600080fd5b5060408051808201909152600381527f43424300000000000000000000000000000000000000000000000000000000006020820152610337565b34801561073157600080fd5b5061039c6107403660046132d5565b611ad8565b34801561075157600080fd5b5061039c610760366004613469565b611ae3565b34801561077157600080fd5b5061039c6107803660046131d2565b611be4565b34801561079157600080fd5b5061039c6107a0366004613469565b611c82565b3480156107b157600080fd5b5061039c6107c0366004613269565b611d24565b3480156107d157600080fd5b5061039c6107e03660046131d2565b611dac565b3480156107f157600080fd5b50610337610800366004613469565b611e4f565b34801561081157600080fd5b50600154610364906001600160a01b031681565b34801561083157600080fd5b5061039c611f0e565b34801561084657600080fd5b506102e06108553660046131ef565b611fd3565b34801561086657600080fd5b5061039c6108753660046131d2565b6120ba565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f2a55205a0000000000000000000000000000000000000000000000000000000014806108d057506108d0826121a8565b92915050565b6000818152600360205260408120546001600160a01b03166109655760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b506000908152600560205260409020546001600160a01b031690565b336109946000546001600160a01b031690565b6001600160a01b0316146109ea5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095c565b6103e8811115610a625760405162461bcd60e51b815260206004820152602660248201527f726f79616c74792063616e6e6f74206265206d6f7265207468616e203130207060448201527f657263656e740000000000000000000000000000000000000000000000000000606482015260840161095c565b600d805490829055604051829082907fb4fb93f70c244a4a5ccc896856ac486b87475e23f8050e29a7c790c456cbddc590600090a35050565b6000818152600360205260409020546001600160a01b03908116908316811415610b2d5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f7200000000000000000000000000000000000000000000000000000000000000606482015260840161095c565b336001600160a01b0382161480610b495750610b498133611fd3565b610bbb5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161095c565b610bc5838361228b565b505050565b33610bdd6000546001600160a01b031690565b6001600160a01b031614610c335760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095c565b600780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff81166101009182900460ff1615909102179055565b600954600c5460008211610cc35760405162461bcd60e51b815260206004820152601b60248201527f526571756573742065786365656473206d617820737570706c79210000000000604482015260640161095c565b803414610d125760405162461bcd60e51b815260206004820152601a60248201527f45544820416d6f756e74206973206e6f7420636f727265637421000000000000604482015260640161095c565b60075462010000900460ff16610d6a5760405162461bcd60e51b815260206004820152601760248201527f4d696e74696e67206973206e6f7420656e61626c656421000000000000000000604482015260640161095c565b336000908152600e602052604090205415610dc75760405162461bcd60e51b815260206004820152601d60248201527f43616e2774206d696e74206d6f7265207468616e203120746f6b656e21000000604482015260640161095c565b60098054906000610dd783613766565b9091555050336000908152600e60205260408120805491610df783613811565b9190505550610e0533612311565b5050565b6000610e1583836124b0565b9392505050565b610e263382612590565b610e985760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f766564000000000000000000000000000000606482015260840161095c565b610bc5838383612675565b60008281526003602052604081205481906001600160a01b0316610f2f5760405162461bcd60e51b815260206004820152602760248201527f526f79616c6974792071756572727920666f72206e6f6e2d6578697374616e7460448201527f20746f6b656e2100000000000000000000000000000000000000000000000000606482015260840161095c565b6000546001600160a01b0316612710600d5485610f4c91906136e6565b610f5691906136d2565b915091505b9250929050565b33610f756000546001600160a01b031690565b6001600160a01b031614610fcb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095c565b600780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00811660ff90911615179055565b336110106000546001600160a01b031690565b6001600160a01b0316146110665760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095c565b6040516000903390610a2890479084818181858888f193505050503d80600081146110ad576040519150601f19603f3d011682016040523d82523d6000602084013e6110b2565b606091505b50509050806111035760405162461bcd60e51b815260206004820152601b60248201527f4661696c656420746f207769746864726177207061796d656e74210000000000604482015260640161095c565b50565b610bc583838360405180602001604052806000815250611d24565b336111346000546001600160a01b031690565b6001600160a01b03161461118a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095c565b610bc56002838361302e565b6001816008546111a69190613723565b6111b09190613723565b81600a546111be91906136e6565b6000821161120e5760405162461bcd60e51b815260206004820152601b60248201527f526571756573742065786365656473206d617820737570706c79210000000000604482015260640161095c565b80341461125d5760405162461bcd60e51b815260206004820152601a60248201527f45544820416d6f756e74206973206e6f7420636f727265637421000000000000604482015260640161095c565b6112678585612850565b336000908152600e60205260409020546003906112859085906136ba565b106112d25760405162461bcd60e51b815260206004820152601e60248201527f43616e2774206d696e74206d6f7265207468616e203220746f6b656e73210000604482015260640161095c565b82600860008282546112e49190613723565b9091555050336000908152600e6020526040812080548592906113089084906136ba565b90915550600090505b838110156113345761132233612311565b8061132c81613811565b915050611311565b505050505050565b6000818152600360205260408120546001600160a01b0316806108d05760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e0000000000000000000000000000000000000000000000606482015260840161095c565b600280546113d49061379b565b80601f01602080910402602001604051908101604052809291908181526020018280546114009061379b565b801561144d5780601f106114225761010080835404028352916020019161144d565b820191906000526020600020905b81548152906001019060200180831161143057829003601f168201915b505050505081565b60006001600160a01b0382166114d35760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f206164647265737300000000000000000000000000000000000000000000606482015260840161095c565b506001600160a01b031660009081526004602052604090205490565b336115026000546001600160a01b031690565b6001600160a01b0316146115585760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095c565b6115626000612933565b565b336115776000546001600160a01b031690565b6001600160a01b0316146115cd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095c565b600c805490829055604051829082907f2942d24204aedd5f258e57ff591497e39deebe8432cc5fe60afc6e54fcf036a890600090a35050565b336116196000546001600160a01b031690565b6001600160a01b03161461166f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095c565b600b805490829055604051829082907fadbfae63970e86aed50504f7c74ac08d918b8f48fa752683114c29909b49639890600090a35050565b600854600b54600082116116fe5760405162461bcd60e51b815260206004820152601b60248201527f526571756573742065786365656473206d617820737570706c79210000000000604482015260640161095c565b80341461174d5760405162461bcd60e51b815260206004820152601a60248201527f45544820416d6f756e74206973206e6f7420636f727265637421000000000000604482015260640161095c565b60075460ff1661179f5760405162461bcd60e51b815260206004820152601860248201527f5072652073616c65206973206e6f7420656e61626c6564210000000000000000604482015260640161095c565b6117df3385858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506124b092505050565b61182b5760405162461bcd60e51b815260206004820152601560248201527f55736572206e6f742077686974656c6973746564210000000000000000000000604482015260640161095c565b336000908152600e6020526040902054156118885760405162461bcd60e51b815260206004820152601d60248201527f43616e2774206d696e74206d6f7265207468616e203120746f6b656e21000000604482015260640161095c565b6008805490600061189883613766565b9091555050336000908152600e602052604081208054916118b883613811565b91905055506118c633612311565b50505050565b336118df6000546001600160a01b031690565b6001600160a01b0316146119355760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095c565b6115b36009548261194691906136ba565b11156119945760405162461bcd60e51b815260206004820152601c60248201527f546f74616c20737570706c792063616e2774206265203e203535353500000000604482015260640161095c565b6008805490829055604051829082907febd44d4b6633ac36bc1f3a5a1dd15d30ca4f99eeb257daa94db8285528de384290600090a35050565b6001600160a01b0381166000908152600460205260408120546060919067ffffffffffffffff811115611a0257611a026138eb565b604051908082528060200260200182016040528015611a2b578160200160208202803683370190505b506000805491925090611a5b9074010000000000000000000000000000000000000000900461ffff166001613694565b61ffff169050600060015b82811015611ace57856001600160a01b0316611a818261133c565b6001600160a01b03161415611abc5780848381518110611aa357611aa36138bc565b602090810291909101015281611ab881613811565b9250505b80611ac681613811565b915050611a66565b5091949350505050565b610e0533838361299b565b33611af66000546001600160a01b031690565b6001600160a01b031614611b4c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095c565b6115b381600854611b5d91906136ba565b1115611bab5760405162461bcd60e51b815260206004820152601c60248201527f546f74616c20737570706c792063616e2774206265203e203535353500000000604482015260640161095c565b6009805490829055604051829082907f77368c31cdad91237eeb78ffd6c9bb510fbbc177bd9f3452573639273f1d414490600090a35050565b33611bf76000546001600160a01b031690565b6001600160a01b031614611c4d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095c565b60005460017401000000000000000000000000000000000000000090910461ffff1610611c7957600080fd5b61110381612311565b33611c956000546001600160a01b031690565b6001600160a01b031614611ceb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095c565b600a805490829055604051829082907f8e06408714b4f5b788017c82e981173ebd70a00c60eabfb45470c5ff1d7bdf3c90600090a35050565b611d2e3383612590565b611da05760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f766564000000000000000000000000000000606482015260840161095c565b6118c684848484612a88565b33611dbf6000546001600160a01b031690565b6001600160a01b031614611e155760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095c565b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6000818152600360205260409020546060906001600160a01b0316611edc5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000606482015260840161095c565b6002611ee783612b11565b604051602001611ef892919061350a565b6040516020818303038152906040529050919050565b33611f216000546001600160a01b031690565b6001600160a01b031614611f775760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095c565b60078054620100007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000821681900460ff1615027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000909116179055565b6001546040517fc45527910000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015260009281169190841690829063c45527919060240160206040518083038186803b15801561203957600080fd5b505afa15801561204d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612071919061344c565b6001600160a01b0316141561208a5760019150506108d0565b50506001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b336120cd6000546001600160a01b031690565b6001600160a01b0316146121235760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095c565b6001600160a01b03811661219f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161095c565b61110381612933565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061223b57507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806108d057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146108d0565b600081815260056020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03841690811790915581906122d88261133c565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000805461233c9074010000000000000000000000000000000000000000900461ffff166001613694565b6001600160a01b0383166000908152600460205260408120805461ffff9390931693509061236983613811565b909155505060008181526003602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46000805474010000000000000000000000000000000000000000900461ffff16906014612407836137ef565b91906101000a81548161ffff021916908361ffff1602179055505061243e6000838360405180602001604052806000815250612c43565b610e055760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e7465720000000000000000000000000000606482015260840161095c565b600080546040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086901b1660208201526001600160a01b039091169061257f90612579906034015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000084830152603c8085019190915282518085039091018152605c909301909152815191012090565b84612e0e565b6001600160a01b0316149392505050565b6000818152600360205260408120546001600160a01b031661261a5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e0000000000000000000000000000000000000000606482015260840161095c565b6000828152600360205260409020546001600160a01b0390811690841681148061265d5750836001600160a01b0316612652846108d6565b6001600160a01b0316145b8061266d575061266d8185611fd3565b949350505050565b6000818152600360205260409020546001600160a01b038481169116146127045760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e6572000000000000000000000000000000000000000000000000000000606482015260840161095c565b6001600160a01b03821661277f5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161095c565b61278a60008261228b565b6001600160a01b03831660009081526004602052604081208054916127ae83613766565b90915550506001600160a01b03821660009081526004602052604081208054916127d783613811565b909155505060008181526003602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600754610100900460ff166128a75760405162461bcd60e51b815260206004820152601a60248201527f4f67206d696e74696e67206973206e6f7420656e61626c656421000000000000604482015260640161095c565b6128e73383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612e1b92505050565b610e055760405162461bcd60e51b815260206004820152600c60248201527f55736572206e6f74204f47210000000000000000000000000000000000000000604482015260640161095c565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b816001600160a01b0316836001600160a01b031614156129fd5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161095c565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612a93848484612675565b612a9f84848484612c43565b6118c65760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e7465720000000000000000000000000000606482015260840161095c565b606081612b5157505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612b7b5780612b6581613811565b9150612b749050600a836136d2565b9150612b55565b60008167ffffffffffffffff811115612b9657612b966138eb565b6040519080825280601f01601f191660200182016040528015612bc0576020820181803683370190505b5090505b841561266d57612bd5600183613723565b9150612be2600a8661384a565b612bed9060306136ba565b60f81b818381518110612c0257612c026138bc565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612c3c600a866136d2565b9450612bc4565b60006001600160a01b0384163b15612e03576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a0290612ca090339089908890889060040161360b565b602060405180830381600087803b158015612cba57600080fd5b505af1925050508015612d08575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612d05918101906133a1565b60015b612db8573d808015612d36576040519150601f19603f3d011682016040523d82523d6000602084013e612d3b565b606091505b508051612db05760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e7465720000000000000000000000000000606482015260840161095c565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a020000000000000000000000000000000000000000000000000000000014905061266d565b506001949350505050565b60008061266d8484612e90565b600080546040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086901b1660208201527f4f4700000000000000000000000000000000000000000000000000000000000060348201526001600160a01b039091169061257f90612579906036016124fb565b6000815160411415612ec45760208201516040830151606084015160001a612eba86828585612ef4565b93505050506108d0565b815160401415612eec5760208201516040830151612ee3858383612feb565b925050506108d0565b5060006108d0565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115612f265750600061266d565b8360ff16601b14158015612f3e57508360ff16601c14155b15612f4b5750600061266d565b6040805160008082526020820180845288905260ff871692820192909252606081018590526080810184905260019060a0016020604051602081039080840390855afa158015612f9f573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001519150506001600160a01b038116612fe257600091505061266d565b95945050505050565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821660ff83901c601b0161302486828785612ef4565b9695505050505050565b82805461303a9061379b565b90600052602060002090601f01602090048101928261305c57600085556130c0565b82601f10613093578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008235161785556130c0565b828001600101855582156130c0579182015b828111156130c05782358255916020019190600101906130a5565b506130cc9291506130d0565b5090565b5b808211156130cc57600081556001016130d1565b60008083601f8401126130f757600080fd5b50813567ffffffffffffffff81111561310f57600080fd5b602083019150836020828501011115610f5b57600080fd5b600082601f83011261313857600080fd5b813567ffffffffffffffff80821115613153576131536138eb565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715613199576131996138eb565b816040528381528660208588010111156131b257600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000602082840312156131e457600080fd5b8135610e158161391a565b6000806040838503121561320257600080fd5b823561320d8161391a565b9150602083013561321d8161391a565b809150509250929050565b60008060006060848603121561323d57600080fd5b83356132488161391a565b925060208401356132588161391a565b929592945050506040919091013590565b6000806000806080858703121561327f57600080fd5b843561328a8161391a565b9350602085013561329a8161391a565b925060408501359150606085013567ffffffffffffffff8111156132bd57600080fd5b6132c987828801613127565b91505092959194509250565b600080604083850312156132e857600080fd5b82356132f38161391a565b91506020830135801515811461321d57600080fd5b6000806040838503121561331b57600080fd5b82356133268161391a565b9150602083013567ffffffffffffffff81111561334257600080fd5b61334e85828601613127565b9150509250929050565b6000806040838503121561336b57600080fd5b82356133768161391a565b946020939093013593505050565b60006020828403121561339657600080fd5b8135610e158161392f565b6000602082840312156133b357600080fd5b8151610e158161392f565b600080602083850312156133d157600080fd5b823567ffffffffffffffff8111156133e857600080fd5b6133f4858286016130e5565b90969095509350505050565b60008060006040848603121561341557600080fd5b833567ffffffffffffffff81111561342c57600080fd5b613438868287016130e5565b909790965060209590950135949350505050565b60006020828403121561345e57600080fd5b8151610e158161391a565b60006020828403121561347b57600080fd5b5035919050565b6000806040838503121561349557600080fd5b50508035926020909101359150565b600081518084526134bc81602086016020860161373a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6000815161350081856020860161373a565b9290920192915050565b600080845481600182811c91508083168061352657607f831692505b602080841082141561355f577f4e487b710000000000000000000000000000000000000000000000000000000086526022600452602486fd5b81801561357357600181146135a2576135cf565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008616895284890196506135cf565b60008b81526020902060005b868110156135c75781548b8201529085019083016135ae565b505084890196505b505050505050612fe26135e282866134ee565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000815260050190565b60006001600160a01b0380871683528086166020840152508360408301526080606083015261302460808301846134a4565b6020808252825182820181905260009190848201906040850190845b8181101561367557835183529284019291840191600101613659565b50909695505050505050565b602081526000610e1560208301846134a4565b600061ffff8083168185168083038211156136b1576136b161385e565b01949350505050565b600082198211156136cd576136cd61385e565b500190565b6000826136e1576136e161388d565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561371e5761371e61385e565b500290565b6000828210156137355761373561385e565b500390565b60005b8381101561375557818101518382015260200161373d565b838111156118c65750506000910152565b6000816137755761377561385e565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b600181811c908216806137af57607f821691505b602082108114156137e9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600061ffff808316818114156138075761380761385e565b6001019392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156138435761384361385e565b5060010190565b6000826138595761385961388d565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6001600160a01b038116811461110357600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008116811461110357600080fdfea26469706673582212203edceb71043ea9f3edddcc84337047fa5e376368d95f31901f3da26a617c7d0264736f6c63430008070033000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c100000000000000000000000000000000000000000000000000000000000015b3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d529ae9e86000000000000000000000000000000000000000000000000000000d529ae9e86000000000000000000000000000000000000000000000000000000d529ae9e86000000000000000000000000000000000000000000000000000000000000000002ee0000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002168747470733a2f2f6170692e6368696c6c626561722e636c75622f746f6b656e2f00000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102bb5760003560e01c8063715018a61161016e578063a7b8e90f116100cb578063c87b56dd1161007f578063e222c7f911610064578063e222c7f914610825578063e985e9c51461083a578063f2fde38b1461085a57600080fd5b8063c87b56dd146107e5578063cd7c03261461080557600080fd5b8063b824ca88116100b0578063b824ca8814610785578063b88d4fde146107a5578063bd2f5244146107c557600080fd5b8063a7b8e90f14610745578063b0413beb1461076557600080fd5b80638462151c116101225780638da5cb5b116101075780638da5cb5b146106c157806395d89b41146106df578063a22cb4651461072557600080fd5b80638462151c146106515780638b2c92ab1461067e57600080fd5b80637d7eee42116101535780637d7eee42146105fe578063801b2eba1461061e57806380ebe00d1461063157600080fd5b8063715018a6146105c9578063791a2519146105de57600080fd5b80632a55205a1161021c578063607019b9116101d05780636c0360eb116101b55780636c0360eb1461053d5780636cafd0df1461055257806370a082311461059b57600080fd5b8063607019b91461050a5780636352211e1461051d57600080fd5b80633ccfd60b116102015780633ccfd60b146104b557806342842e0e146104ca57806355f804b3146104ea57600080fd5b80632a55205a1461046157806334393743146104a057600080fd5b806309e95aba1161027357806318160ddd1161025857806318160ddd146103db5780631f0a8fa71461042157806323b872dd1461044157600080fd5b806309e95aba146103be5780631249c58b146103d357600080fd5b8063081812fc116102a4578063081812fc146103445780630913d9841461037c578063095ea7b31461039e57600080fd5b806301ffc9a7146102c057806306fdde03146102f5575b600080fd5b3480156102cc57600080fd5b506102e06102db366004613384565b61087a565b60405190151581526020015b60405180910390f35b34801561030157600080fd5b5060408051808201909152600f81527f4368696c6c204265617220436c7562000000000000000000000000000000000060208201525b6040516102ec9190613681565b34801561035057600080fd5b5061036461035f366004613469565b6108d6565b6040516001600160a01b0390911681526020016102ec565b34801561038857600080fd5b5061039c610397366004613469565b610981565b005b3480156103aa57600080fd5b5061039c6103b9366004613358565b610a9b565b3480156103ca57600080fd5b5061039c610bca565b61039c610c6d565b3480156103e757600080fd5b5060005461040e9074010000000000000000000000000000000000000000900461ffff1681565b60405161ffff90911681526020016102ec565b34801561042d57600080fd5b506102e061043c366004613308565b610e09565b34801561044d57600080fd5b5061039c61045c366004613228565b610e1c565b34801561046d57600080fd5b5061048161047c366004613482565b610ea3565b604080516001600160a01b0390931683526020830191909152016102ec565b3480156104ac57600080fd5b5061039c610f62565b3480156104c157600080fd5b5061039c610ffd565b3480156104d657600080fd5b5061039c6104e5366004613228565b611106565b3480156104f657600080fd5b5061039c6105053660046133be565b611121565b61039c610518366004613400565b611196565b34801561052957600080fd5b50610364610538366004613469565b61133c565b34801561054957600080fd5b506103376113c7565b34801561055e57600080fd5b50600854600954600b54600a54600c54600d54604080519687526020870195909552938501526060840152608083015260a082015260c0016102ec565b3480156105a757600080fd5b506105bb6105b63660046131d2565b611455565b6040519081526020016102ec565b3480156105d557600080fd5b5061039c6114ef565b3480156105ea57600080fd5b5061039c6105f9366004613469565b611564565b34801561060a57600080fd5b5061039c610619366004613469565b611606565b61039c61062c3660046133be565b6116a8565b34801561063d57600080fd5b5061039c61064c366004613469565b6118cc565b34801561065d57600080fd5b5061067161066c3660046131d2565b6119cd565b6040516102ec919061363d565b34801561068a57600080fd5b506007546040805160ff610100840481161515825280841615156020830152620100009093049092161515908201526060016102ec565b3480156106cd57600080fd5b506000546001600160a01b0316610364565b3480156106eb57600080fd5b5060408051808201909152600381527f43424300000000000000000000000000000000000000000000000000000000006020820152610337565b34801561073157600080fd5b5061039c6107403660046132d5565b611ad8565b34801561075157600080fd5b5061039c610760366004613469565b611ae3565b34801561077157600080fd5b5061039c6107803660046131d2565b611be4565b34801561079157600080fd5b5061039c6107a0366004613469565b611c82565b3480156107b157600080fd5b5061039c6107c0366004613269565b611d24565b3480156107d157600080fd5b5061039c6107e03660046131d2565b611dac565b3480156107f157600080fd5b50610337610800366004613469565b611e4f565b34801561081157600080fd5b50600154610364906001600160a01b031681565b34801561083157600080fd5b5061039c611f0e565b34801561084657600080fd5b506102e06108553660046131ef565b611fd3565b34801561086657600080fd5b5061039c6108753660046131d2565b6120ba565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f2a55205a0000000000000000000000000000000000000000000000000000000014806108d057506108d0826121a8565b92915050565b6000818152600360205260408120546001600160a01b03166109655760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b506000908152600560205260409020546001600160a01b031690565b336109946000546001600160a01b031690565b6001600160a01b0316146109ea5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095c565b6103e8811115610a625760405162461bcd60e51b815260206004820152602660248201527f726f79616c74792063616e6e6f74206265206d6f7265207468616e203130207060448201527f657263656e740000000000000000000000000000000000000000000000000000606482015260840161095c565b600d805490829055604051829082907fb4fb93f70c244a4a5ccc896856ac486b87475e23f8050e29a7c790c456cbddc590600090a35050565b6000818152600360205260409020546001600160a01b03908116908316811415610b2d5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f7200000000000000000000000000000000000000000000000000000000000000606482015260840161095c565b336001600160a01b0382161480610b495750610b498133611fd3565b610bbb5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161095c565b610bc5838361228b565b505050565b33610bdd6000546001600160a01b031690565b6001600160a01b031614610c335760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095c565b600780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff81166101009182900460ff1615909102179055565b600954600c5460008211610cc35760405162461bcd60e51b815260206004820152601b60248201527f526571756573742065786365656473206d617820737570706c79210000000000604482015260640161095c565b803414610d125760405162461bcd60e51b815260206004820152601a60248201527f45544820416d6f756e74206973206e6f7420636f727265637421000000000000604482015260640161095c565b60075462010000900460ff16610d6a5760405162461bcd60e51b815260206004820152601760248201527f4d696e74696e67206973206e6f7420656e61626c656421000000000000000000604482015260640161095c565b336000908152600e602052604090205415610dc75760405162461bcd60e51b815260206004820152601d60248201527f43616e2774206d696e74206d6f7265207468616e203120746f6b656e21000000604482015260640161095c565b60098054906000610dd783613766565b9091555050336000908152600e60205260408120805491610df783613811565b9190505550610e0533612311565b5050565b6000610e1583836124b0565b9392505050565b610e263382612590565b610e985760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f766564000000000000000000000000000000606482015260840161095c565b610bc5838383612675565b60008281526003602052604081205481906001600160a01b0316610f2f5760405162461bcd60e51b815260206004820152602760248201527f526f79616c6974792071756572727920666f72206e6f6e2d6578697374616e7460448201527f20746f6b656e2100000000000000000000000000000000000000000000000000606482015260840161095c565b6000546001600160a01b0316612710600d5485610f4c91906136e6565b610f5691906136d2565b915091505b9250929050565b33610f756000546001600160a01b031690565b6001600160a01b031614610fcb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095c565b600780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00811660ff90911615179055565b336110106000546001600160a01b031690565b6001600160a01b0316146110665760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095c565b6040516000903390610a2890479084818181858888f193505050503d80600081146110ad576040519150601f19603f3d011682016040523d82523d6000602084013e6110b2565b606091505b50509050806111035760405162461bcd60e51b815260206004820152601b60248201527f4661696c656420746f207769746864726177207061796d656e74210000000000604482015260640161095c565b50565b610bc583838360405180602001604052806000815250611d24565b336111346000546001600160a01b031690565b6001600160a01b03161461118a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095c565b610bc56002838361302e565b6001816008546111a69190613723565b6111b09190613723565b81600a546111be91906136e6565b6000821161120e5760405162461bcd60e51b815260206004820152601b60248201527f526571756573742065786365656473206d617820737570706c79210000000000604482015260640161095c565b80341461125d5760405162461bcd60e51b815260206004820152601a60248201527f45544820416d6f756e74206973206e6f7420636f727265637421000000000000604482015260640161095c565b6112678585612850565b336000908152600e60205260409020546003906112859085906136ba565b106112d25760405162461bcd60e51b815260206004820152601e60248201527f43616e2774206d696e74206d6f7265207468616e203220746f6b656e73210000604482015260640161095c565b82600860008282546112e49190613723565b9091555050336000908152600e6020526040812080548592906113089084906136ba565b90915550600090505b838110156113345761132233612311565b8061132c81613811565b915050611311565b505050505050565b6000818152600360205260408120546001600160a01b0316806108d05760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e0000000000000000000000000000000000000000000000606482015260840161095c565b600280546113d49061379b565b80601f01602080910402602001604051908101604052809291908181526020018280546114009061379b565b801561144d5780601f106114225761010080835404028352916020019161144d565b820191906000526020600020905b81548152906001019060200180831161143057829003601f168201915b505050505081565b60006001600160a01b0382166114d35760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f206164647265737300000000000000000000000000000000000000000000606482015260840161095c565b506001600160a01b031660009081526004602052604090205490565b336115026000546001600160a01b031690565b6001600160a01b0316146115585760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095c565b6115626000612933565b565b336115776000546001600160a01b031690565b6001600160a01b0316146115cd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095c565b600c805490829055604051829082907f2942d24204aedd5f258e57ff591497e39deebe8432cc5fe60afc6e54fcf036a890600090a35050565b336116196000546001600160a01b031690565b6001600160a01b03161461166f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095c565b600b805490829055604051829082907fadbfae63970e86aed50504f7c74ac08d918b8f48fa752683114c29909b49639890600090a35050565b600854600b54600082116116fe5760405162461bcd60e51b815260206004820152601b60248201527f526571756573742065786365656473206d617820737570706c79210000000000604482015260640161095c565b80341461174d5760405162461bcd60e51b815260206004820152601a60248201527f45544820416d6f756e74206973206e6f7420636f727265637421000000000000604482015260640161095c565b60075460ff1661179f5760405162461bcd60e51b815260206004820152601860248201527f5072652073616c65206973206e6f7420656e61626c6564210000000000000000604482015260640161095c565b6117df3385858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506124b092505050565b61182b5760405162461bcd60e51b815260206004820152601560248201527f55736572206e6f742077686974656c6973746564210000000000000000000000604482015260640161095c565b336000908152600e6020526040902054156118885760405162461bcd60e51b815260206004820152601d60248201527f43616e2774206d696e74206d6f7265207468616e203120746f6b656e21000000604482015260640161095c565b6008805490600061189883613766565b9091555050336000908152600e602052604081208054916118b883613811565b91905055506118c633612311565b50505050565b336118df6000546001600160a01b031690565b6001600160a01b0316146119355760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095c565b6115b36009548261194691906136ba565b11156119945760405162461bcd60e51b815260206004820152601c60248201527f546f74616c20737570706c792063616e2774206265203e203535353500000000604482015260640161095c565b6008805490829055604051829082907febd44d4b6633ac36bc1f3a5a1dd15d30ca4f99eeb257daa94db8285528de384290600090a35050565b6001600160a01b0381166000908152600460205260408120546060919067ffffffffffffffff811115611a0257611a026138eb565b604051908082528060200260200182016040528015611a2b578160200160208202803683370190505b506000805491925090611a5b9074010000000000000000000000000000000000000000900461ffff166001613694565b61ffff169050600060015b82811015611ace57856001600160a01b0316611a818261133c565b6001600160a01b03161415611abc5780848381518110611aa357611aa36138bc565b602090810291909101015281611ab881613811565b9250505b80611ac681613811565b915050611a66565b5091949350505050565b610e0533838361299b565b33611af66000546001600160a01b031690565b6001600160a01b031614611b4c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095c565b6115b381600854611b5d91906136ba565b1115611bab5760405162461bcd60e51b815260206004820152601c60248201527f546f74616c20737570706c792063616e2774206265203e203535353500000000604482015260640161095c565b6009805490829055604051829082907f77368c31cdad91237eeb78ffd6c9bb510fbbc177bd9f3452573639273f1d414490600090a35050565b33611bf76000546001600160a01b031690565b6001600160a01b031614611c4d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095c565b60005460017401000000000000000000000000000000000000000090910461ffff1610611c7957600080fd5b61110381612311565b33611c956000546001600160a01b031690565b6001600160a01b031614611ceb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095c565b600a805490829055604051829082907f8e06408714b4f5b788017c82e981173ebd70a00c60eabfb45470c5ff1d7bdf3c90600090a35050565b611d2e3383612590565b611da05760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f766564000000000000000000000000000000606482015260840161095c565b6118c684848484612a88565b33611dbf6000546001600160a01b031690565b6001600160a01b031614611e155760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095c565b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6000818152600360205260409020546060906001600160a01b0316611edc5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000606482015260840161095c565b6002611ee783612b11565b604051602001611ef892919061350a565b6040516020818303038152906040529050919050565b33611f216000546001600160a01b031690565b6001600160a01b031614611f775760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095c565b60078054620100007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000821681900460ff1615027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000909116179055565b6001546040517fc45527910000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015260009281169190841690829063c45527919060240160206040518083038186803b15801561203957600080fd5b505afa15801561204d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612071919061344c565b6001600160a01b0316141561208a5760019150506108d0565b50506001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b336120cd6000546001600160a01b031690565b6001600160a01b0316146121235760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095c565b6001600160a01b03811661219f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161095c565b61110381612933565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061223b57507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806108d057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146108d0565b600081815260056020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03841690811790915581906122d88261133c565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000805461233c9074010000000000000000000000000000000000000000900461ffff166001613694565b6001600160a01b0383166000908152600460205260408120805461ffff9390931693509061236983613811565b909155505060008181526003602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46000805474010000000000000000000000000000000000000000900461ffff16906014612407836137ef565b91906101000a81548161ffff021916908361ffff1602179055505061243e6000838360405180602001604052806000815250612c43565b610e055760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e7465720000000000000000000000000000606482015260840161095c565b600080546040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086901b1660208201526001600160a01b039091169061257f90612579906034015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000084830152603c8085019190915282518085039091018152605c909301909152815191012090565b84612e0e565b6001600160a01b0316149392505050565b6000818152600360205260408120546001600160a01b031661261a5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e0000000000000000000000000000000000000000606482015260840161095c565b6000828152600360205260409020546001600160a01b0390811690841681148061265d5750836001600160a01b0316612652846108d6565b6001600160a01b0316145b8061266d575061266d8185611fd3565b949350505050565b6000818152600360205260409020546001600160a01b038481169116146127045760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e6572000000000000000000000000000000000000000000000000000000606482015260840161095c565b6001600160a01b03821661277f5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161095c565b61278a60008261228b565b6001600160a01b03831660009081526004602052604081208054916127ae83613766565b90915550506001600160a01b03821660009081526004602052604081208054916127d783613811565b909155505060008181526003602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600754610100900460ff166128a75760405162461bcd60e51b815260206004820152601a60248201527f4f67206d696e74696e67206973206e6f7420656e61626c656421000000000000604482015260640161095c565b6128e73383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612e1b92505050565b610e055760405162461bcd60e51b815260206004820152600c60248201527f55736572206e6f74204f47210000000000000000000000000000000000000000604482015260640161095c565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b816001600160a01b0316836001600160a01b031614156129fd5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161095c565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612a93848484612675565b612a9f84848484612c43565b6118c65760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e7465720000000000000000000000000000606482015260840161095c565b606081612b5157505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612b7b5780612b6581613811565b9150612b749050600a836136d2565b9150612b55565b60008167ffffffffffffffff811115612b9657612b966138eb565b6040519080825280601f01601f191660200182016040528015612bc0576020820181803683370190505b5090505b841561266d57612bd5600183613723565b9150612be2600a8661384a565b612bed9060306136ba565b60f81b818381518110612c0257612c026138bc565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612c3c600a866136d2565b9450612bc4565b60006001600160a01b0384163b15612e03576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a0290612ca090339089908890889060040161360b565b602060405180830381600087803b158015612cba57600080fd5b505af1925050508015612d08575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612d05918101906133a1565b60015b612db8573d808015612d36576040519150601f19603f3d011682016040523d82523d6000602084013e612d3b565b606091505b508051612db05760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e7465720000000000000000000000000000606482015260840161095c565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a020000000000000000000000000000000000000000000000000000000014905061266d565b506001949350505050565b60008061266d8484612e90565b600080546040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086901b1660208201527f4f4700000000000000000000000000000000000000000000000000000000000060348201526001600160a01b039091169061257f90612579906036016124fb565b6000815160411415612ec45760208201516040830151606084015160001a612eba86828585612ef4565b93505050506108d0565b815160401415612eec5760208201516040830151612ee3858383612feb565b925050506108d0565b5060006108d0565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115612f265750600061266d565b8360ff16601b14158015612f3e57508360ff16601c14155b15612f4b5750600061266d565b6040805160008082526020820180845288905260ff871692820192909252606081018590526080810184905260019060a0016020604051602081039080840390855afa158015612f9f573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001519150506001600160a01b038116612fe257600091505061266d565b95945050505050565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821660ff83901c601b0161302486828785612ef4565b9695505050505050565b82805461303a9061379b565b90600052602060002090601f01602090048101928261305c57600085556130c0565b82601f10613093578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008235161785556130c0565b828001600101855582156130c0579182015b828111156130c05782358255916020019190600101906130a5565b506130cc9291506130d0565b5090565b5b808211156130cc57600081556001016130d1565b60008083601f8401126130f757600080fd5b50813567ffffffffffffffff81111561310f57600080fd5b602083019150836020828501011115610f5b57600080fd5b600082601f83011261313857600080fd5b813567ffffffffffffffff80821115613153576131536138eb565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715613199576131996138eb565b816040528381528660208588010111156131b257600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000602082840312156131e457600080fd5b8135610e158161391a565b6000806040838503121561320257600080fd5b823561320d8161391a565b9150602083013561321d8161391a565b809150509250929050565b60008060006060848603121561323d57600080fd5b83356132488161391a565b925060208401356132588161391a565b929592945050506040919091013590565b6000806000806080858703121561327f57600080fd5b843561328a8161391a565b9350602085013561329a8161391a565b925060408501359150606085013567ffffffffffffffff8111156132bd57600080fd5b6132c987828801613127565b91505092959194509250565b600080604083850312156132e857600080fd5b82356132f38161391a565b91506020830135801515811461321d57600080fd5b6000806040838503121561331b57600080fd5b82356133268161391a565b9150602083013567ffffffffffffffff81111561334257600080fd5b61334e85828601613127565b9150509250929050565b6000806040838503121561336b57600080fd5b82356133768161391a565b946020939093013593505050565b60006020828403121561339657600080fd5b8135610e158161392f565b6000602082840312156133b357600080fd5b8151610e158161392f565b600080602083850312156133d157600080fd5b823567ffffffffffffffff8111156133e857600080fd5b6133f4858286016130e5565b90969095509350505050565b60008060006040848603121561341557600080fd5b833567ffffffffffffffff81111561342c57600080fd5b613438868287016130e5565b909790965060209590950135949350505050565b60006020828403121561345e57600080fd5b8151610e158161391a565b60006020828403121561347b57600080fd5b5035919050565b6000806040838503121561349557600080fd5b50508035926020909101359150565b600081518084526134bc81602086016020860161373a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6000815161350081856020860161373a565b9290920192915050565b600080845481600182811c91508083168061352657607f831692505b602080841082141561355f577f4e487b710000000000000000000000000000000000000000000000000000000086526022600452602486fd5b81801561357357600181146135a2576135cf565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008616895284890196506135cf565b60008b81526020902060005b868110156135c75781548b8201529085019083016135ae565b505084890196505b505050505050612fe26135e282866134ee565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000815260050190565b60006001600160a01b0380871683528086166020840152508360408301526080606083015261302460808301846134a4565b6020808252825182820181905260009190848201906040850190845b8181101561367557835183529284019291840191600101613659565b50909695505050505050565b602081526000610e1560208301846134a4565b600061ffff8083168185168083038211156136b1576136b161385e565b01949350505050565b600082198211156136cd576136cd61385e565b500190565b6000826136e1576136e161388d565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561371e5761371e61385e565b500290565b6000828210156137355761373561385e565b500390565b60005b8381101561375557818101518382015260200161373d565b838111156118c65750506000910152565b6000816137755761377561385e565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b600181811c908216806137af57607f821691505b602082108114156137e9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600061ffff808316818114156138075761380761385e565b6001019392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156138435761384361385e565b5060010190565b6000826138595761385961388d565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6001600160a01b038116811461110357600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008116811461110357600080fdfea26469706673582212203edceb71043ea9f3edddcc84337047fa5e376368d95f31901f3da26a617c7d0264736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c100000000000000000000000000000000000000000000000000000000000015b3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d529ae9e86000000000000000000000000000000000000000000000000000000d529ae9e86000000000000000000000000000000000000000000000000000000d529ae9e86000000000000000000000000000000000000000000000000000000000000000002ee0000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002168747470733a2f2f6170692e6368696c6c626561722e636c75622f746f6b656e2f00000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _openseaProxyRegistry (address): 0xa5409ec958C83C3f309868babACA7c86DCB077c1
Arg [1] : preMintSupply (uint256): 5555
Arg [2] : publicSaleSupply (uint256): 0
Arg [3] : publicSalePrice (uint256): 60000000000000000
Arg [4] : ogPrice (uint256): 60000000000000000
Arg [5] : preSalePrice (uint256): 60000000000000000
Arg [6] : EIP2981RoyaltyPercentage (uint256): 750
Arg [7] : _baseURI (string): https://api.chillbear.club/token/
-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1
Arg [1] : 00000000000000000000000000000000000000000000000000000000000015b3
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [3] : 00000000000000000000000000000000000000000000000000d529ae9e860000
Arg [4] : 00000000000000000000000000000000000000000000000000d529ae9e860000
Arg [5] : 00000000000000000000000000000000000000000000000000d529ae9e860000
Arg [6] : 00000000000000000000000000000000000000000000000000000000000002ee
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000021
Arg [9] : 68747470733a2f2f6170692e6368696c6c626561722e636c75622f746f6b656e
Arg [10] : 2f00000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
32398:9080:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39979:241;;;;;;;;;;-1:-1:-1;39979:241:0;;;;;:::i;:::-;;:::i;:::-;;;11833:14:1;;11826:22;11808:41;;11796:2;11781:18;39979:241:0;;;;;;;;22635:106;;;;;;;;;;-1:-1:-1;22709:24:0;;;;;;;;;;;;;;;;;22635:106;;;;;;;:::i;23758:213::-;;;;;;;;;;-1:-1:-1;23758:213:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;10146:55:1;;;10128:74;;10116:2;10101:18;23758:213:0;9982:226:1;36303:323:0;;;;;;;;;;-1:-1:-1;36303:323:0;;;;;:::i;:::-;;:::i;:::-;;23298:394;;;;;;;;;;-1:-1:-1;23298:394:0;;;;;:::i;:::-;;:::i;40695:80::-;;;;;;;;;;;;;:::i;36848:329::-;;;:::i;20924:25::-;;;;;;;;;;-1:-1:-1;20924:25:0;;;;;;;;;;;;;;23382:6:1;23370:19;;;23352:38;;23340:2;23325:18;20924:25:0;23208:188:1;38746:154:0;;;;;;;;;;-1:-1:-1;38746:154:0;;;;;:::i;:::-;;:::i;24958:331::-;;;;;;;;;;-1:-1:-1;24958:331:0;;;;;:::i;:::-;;:::i;39624:283::-;;;;;;;;;;-1:-1:-1;39624:283:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;10921:55:1;;;10903:74;;11008:2;10993:18;;10986:34;;;;10876:18;39624:283:0;10729:297:1;40592:95:0;;;;;;;;;;;;;:::i;40228:204::-;;;;;;;;;;;;;:::i;25360:179::-;;;;;;;;;;-1:-1:-1;25360:179:0;;;;;:::i;:::-;;:::i;24789:102::-;;;;;;;;;;-1:-1:-1;24789:102:0;;;;;:::i;:::-;;:::i;37610:414::-;;;;;;:::i;:::-;;:::i;22337:231::-;;;;;;;;;;-1:-1:-1;22337:231:0;;;;;:::i;:::-;;:::i;21002:21::-;;;;;;;;;;;;;:::i;34219:510::-;;;;;;;;;;-1:-1:-1;34484:14:0;;34528:17;;34571:13;;34605:8;;34642:16;;34696:25;;34219:510;;;23870:25:1;;;23926:2;23911:18;;23904:34;;;;23954:18;;;23947:34;24012:2;23997:18;;23990:34;24055:3;24040:19;;24033:35;24099:3;24084:19;;24077:35;23857:3;23842:19;34219:510:0;23583:535:1;22073:202:0;;;;;;;;;;-1:-1:-1;22073:202:0;;;;;:::i;:::-;;:::i;:::-;;;23547:25:1;;;23535:2;23520:18;22073:202:0;23401:177:1;1673:96:0;;;;;;;;;;;;;:::i;36008:207::-;;;;;;;;;;-1:-1:-1;36008:207:0;;;;;:::i;:::-;;:::i;35805:195::-;;;;;;;;;;-1:-1:-1;35805:195:0;;;;;:::i;:::-;;:::i;37185:417::-;;;;;;:::i;:::-;;:::i;34973:273::-;;;;;;;;;;-1:-1:-1;34973:273:0;;;;;:::i;:::-;;:::i;41092:383::-;;;;;;;;;;-1:-1:-1;41092:383:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;38908:221::-;;;;;;;;;;-1:-1:-1;39030:7:0;;38908:221;;;39030:7;;;;;;12069:14:1;12062:22;12044:41;;39064:14:0;;;12128::1;12121:22;12116:2;12101:18;;12094:50;39106:15:0;;;;;;;12187:14:1;12180:22;12160:18;;;12153:50;12032:2;12017:18;38908:221:0;11860:349:1;1024:87:0;;;;;;;;;;-1:-1:-1;1070:7:0;1097:6;-1:-1:-1;;;;;1097:6:0;1024:87;;22810:96;;;;;;;;;;-1:-1:-1;22886:12:0;;;;;;;;;;;;;;;;;22810:96;;24043:147;;;;;;;;;;-1:-1:-1;24043:147:0;;;;;:::i;:::-;;:::i;35328:282::-;;;;;;;;;;-1:-1:-1;35328:282:0;;;;;:::i;:::-;;:::i;34089:120::-;;;;;;;;;;-1:-1:-1;34089:120:0;;;;;:::i;:::-;;:::i;35618:179::-;;;;;;;;;;-1:-1:-1;35618:179:0;;;;;:::i;:::-;;:::i;25610:318::-;;;;;;;;;;-1:-1:-1;25610:318:0;;;;;:::i;:::-;;:::i;24669:112::-;;;;;;;;;;-1:-1:-1;24669:112:0;;;;;:::i;:::-;;:::i;22977:259::-;;;;;;;;;;-1:-1:-1;22977:259:0;;;;;:::i;:::-;;:::i;20958:35::-;;;;;;;;;;-1:-1:-1;20958:35:0;;;;-1:-1:-1;;;;;20958:35:0;;;40925:159;;;;;;;;;;;;;:::i;24261:400::-;;;;;;;;;;-1:-1:-1;24261:400:0;;;;;:::i;:::-;;:::i;1924:194::-;;;;;;;;;;-1:-1:-1;1924:194:0;;;;;:::i;:::-;;:::i;39979:241::-;40081:4;40118:41;;;40133:26;40118:41;;:94;;;40176:36;40200:11;40176:23;:36::i;:::-;40098:114;39979:241;-1:-1:-1;;39979:241:0:o;23758:213::-;23826:7;27458:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27458:16:0;23846:73;;;;-1:-1:-1;;;23846:73:0;;19624:2:1;23846:73:0;;;19606:21:1;19663:2;19643:18;;;19636:30;19702:34;19682:18;;;19675:62;19773:14;19753:18;;;19746:42;19805:19;;23846:73:0;;;;;;;;;-1:-1:-1;23939:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;23939:24:0;;23758:213::o;36303:323::-;1255:10;1244:7;1070;1097:6;-1:-1:-1;;;;;1097:6:0;;1024:87;1244:7;-1:-1:-1;;;;;1244:21:0;;1236:66;;;;-1:-1:-1;;;1236:66:0;;20395:2:1;1236:66:0;;;20377:21:1;;;20414:18;;;20407:30;20473:34;20453:18;;;20446:62;20525:18;;1236:66:0;20193:356:1;1236:66:0;36409:4:::1;36395:10;:18;;36387:69;;;::::0;-1:-1:-1;;;36387:69:0;;14275:2:1;36387:69:0::1;::::0;::::1;14257:21:1::0;14314:2;14294:18;;;14287:30;14353:34;14333:18;;;14326:62;14424:8;14404:18;;;14397:36;14450:19;;36387:69:0::1;14073:402:1::0;36387:69:0::1;36479:25;::::0;;36515:38;;;;36569:49:::1;::::0;36543:10;;36479:25;;36569:49:::1;::::0;36467:9:::1;::::0;36569:49:::1;36376:250;36303:323:::0;:::o;23298:394::-;23373:13;23389:16;;;:7;:16;;;;;;-1:-1:-1;;;;;23389:16:0;;;;23424:11;;;;;23416:57;;;;-1:-1:-1;;;23416:57:0;;21172:2:1;23416:57:0;;;21154:21:1;21211:2;21191:18;;;21184:30;21250:34;21230:18;;;21223:62;21321:3;21301:18;;;21294:31;21342:19;;23416:57:0;20970:397:1;23416:57:0;23508:10;-1:-1:-1;;;;;23508:19:0;;;;:58;;;23531:35;23548:5;23555:10;23531:16;:35::i;:::-;23486:164;;;;-1:-1:-1;;;23486:164:0;;17273:2:1;23486:164:0;;;17255:21:1;17312:2;17292:18;;;17285:30;17351:34;17331:18;;;17324:62;17422:26;17402:18;;;17395:54;17466:19;;23486:164:0;17071:420:1;23486:164:0;23663:21;23672:2;23676:7;23663:8;:21::i;:::-;23362:330;23298:394;;:::o;40695:80::-;1255:10;1244:7;1070;1097:6;-1:-1:-1;;;;;1097:6:0;;1024:87;1244:7;-1:-1:-1;;;;;1244:21:0;;1236:66;;;;-1:-1:-1;;;1236:66:0;;20395:2:1;1236:66:0;;;20377:21:1;;;20414:18;;;20407:30;20473:34;20453:18;;;20446:62;20525:18;;1236:66:0;20193:356:1;1236:66:0;40760:7:::1;::::0;;40749:18;;::::1;40760:7;::::0;;;::::1;;;40759:8;40749:18:::0;;::::1;;::::0;;40695:80::o;36848:329::-;36890:17;;36909:16;;36719:1;36703:13;:17;36695:57;;;;-1:-1:-1;;;36695:57:0;;22699:2:1;36695:57:0;;;22681:21:1;22738:2;22718:18;;;22711:30;22777:29;22757:18;;;22750:57;22824:18;;36695:57:0;22497:351:1;36695:57:0;36784:5;36771:9;:18;36763:57;;;;-1:-1:-1;;;36763:57:0;;16152:2:1;36763:57:0;;;16134:21:1;16191:2;16171:18;;;16164:30;16230:28;16210:18;;;16203:56;16276:18;;36763:57:0;15950:350:1;36763:57:0;36946:15:::1;::::0;;;::::1;;;36938:51;;;::::0;-1:-1:-1;;;36938:51:0;;15441:2:1;36938:51:0::1;::::0;::::1;15423:21:1::0;15480:2;15460:18;;;15453:30;15519:25;15499:18;;;15492:53;15562:18;;36938:51:0::1;15239:347:1::0;36938:51:0::1;37021:10;37008:24;::::0;;;:12:::1;:24;::::0;;;;;:29;37000:71:::1;;;::::0;-1:-1:-1;;;37000:71:0;;20037:2:1;37000:71:0::1;::::0;::::1;20019:21:1::0;20076:2;20056:18;;;20049:30;20115:31;20095:18;;;20088:59;20164:18;;37000:71:0::1;19835:353:1::0;37000:71:0::1;37084:17;:19:::0;;;:17:::1;:19;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;37127:10:0::1;37114:24;::::0;;;:12:::1;:24;::::0;;;;:26;;;::::1;::::0;::::1;:::i;:::-;;;;;;37151:18;37158:10;37151:6;:18::i;:::-;36848:329:::0;;:::o;38746:154::-;38833:4;38857:35;38872:7;38881:10;38857:14;:35::i;:::-;38850:42;38746:154;-1:-1:-1;;;38746:154:0:o;24958:331::-;25147:39;25166:10;25178:7;25147:18;:39::i;:::-;25139:101;;;;-1:-1:-1;;;25139:101:0;;21931:2:1;25139:101:0;;;21913:21:1;21970:2;21950:18;;;21943:30;22009:34;21989:18;;;21982:62;22080:19;22060:18;;;22053:47;22117:19;;25139:101:0;21729:413:1;25139:101:0;25253:28;25263:4;25269:2;25273:7;25253:9;:28::i;39624:283::-;39706:16;27458;;;:7;:16;;;;;;39706;;-1:-1:-1;;;;;27458:16:0;39758:68;;;;-1:-1:-1;;;39758:68:0;;19216:2:1;39758:68:0;;;19198:21:1;19255:2;19235:18;;;19228:30;19294:34;19274:18;;;19267:62;19365:9;19345:18;;;19338:37;19392:19;;39758:68:0;19014:403:1;39758:68:0;1070:7;1097:6;-1:-1:-1;;;;;1097:6:0;39893:5;39865:25;;39853:9;:37;;;;:::i;:::-;:45;;;;:::i;:::-;39837:62;;;;39624:283;;;;;;:::o;40592:95::-;1255:10;1244:7;1070;1097:6;-1:-1:-1;;;;;1097:6:0;;1024:87;1244:7;-1:-1:-1;;;;;1244:21:0;;1236:66;;;;-1:-1:-1;;;1236:66:0;;20395:2:1;1236:66:0;;;20377:21:1;;;20414:18;;;20407:30;20473:34;20453:18;;;20446:62;20525:18;;1236:66:0;20193:356:1;1236:66:0;40665:14:::1;::::0;;40647:32;;::::1;40665:14;::::0;;::::1;40664:15;40647:32;::::0;;40592:95::o;40228:204::-;1255:10;1244:7;1070;1097:6;-1:-1:-1;;;;;1097:6:0;;1024:87;1244:7;-1:-1:-1;;;;;1244:21:0;;1236:66;;;;-1:-1:-1;;;1236:66:0;;20395:2:1;1236:66:0;;;20377:21:1;;;20414:18;;;20407:30;20473:34;20453:18;;;20446:62;20525:18;;1236:66:0;20193:356:1;1236:66:0;40297:69:::1;::::0;40279:12:::1;::::0;40305:10:::1;::::0;40357:4:::1;::::0;40329:21:::1;::::0;40279:12;40297:69;40279:12;40297:69;40329:21;40305:10;40357:4;40297:69:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40278:88;;;40385:7;40377:47;;;::::0;-1:-1:-1;;;40377:47:0;;18860:2:1;40377:47:0::1;::::0;::::1;18842:21:1::0;18899:2;18879:18;;;18872:30;18938:29;18918:18;;;18911:57;18985:18;;40377:47:0::1;18658:351:1::0;40377:47:0::1;40267:165;40228:204::o:0;25360:179::-;25492:39;25509:4;25515:2;25519:7;25492:39;;;;;;;;;;;;:16;:39::i;24789:102::-;1255:10;1244:7;1070;1097:6;-1:-1:-1;;;;;1097:6:0;;1024:87;1244:7;-1:-1:-1;;;;;1244:21:0;;1236:66;;;;-1:-1:-1;;;1236:66:0;;20395:2:1;1236:66:0;;;20377:21:1;;;20414:18;;;20407:30;20473:34;20453:18;;;20446:62;20525:18;;1236:66:0;20193:356:1;1236:66:0;24865:18:::1;:7;24875:8:::0;;24865:18:::1;:::i;37610:414::-:0;37711:1;37702:6;37685:14;;:23;;;;:::i;:::-;:27;;;;:::i;:::-;37725:6;37714:8;;:17;;;;:::i;:::-;36719:1;36703:13;:17;36695:57;;;;-1:-1:-1;;;36695:57:0;;22699:2:1;36695:57:0;;;22681:21:1;22738:2;22718:18;;;22711:30;22777:29;22757:18;;;22750:57;22824:18;;36695:57:0;22497:351:1;36695:57:0;36784:5;36771:9;:18;36763:57;;;;-1:-1:-1;;;36763:57:0;;16152:2:1;36763:57:0;;;16134:21:1;16191:2;16171:18;;;16164:30;16230:28;16210:18;;;16203:56;16276:18;;36763:57:0;15950:350:1;36763:57:0;37744:12:::1;37752:3;;37744:7;:12::i;:::-;37788:10;37775:24;::::0;;;:12:::1;:24;::::0;;;;;37811:1:::1;::::0;37775:33:::1;::::0;37802:6;;37775:33:::1;:::i;:::-;:37;37767:80;;;::::0;-1:-1:-1;;;37767:80:0;;15793:2:1;37767:80:0::1;::::0;::::1;15775:21:1::0;15832:2;15812:18;;;15805:30;15871:32;15851:18;;;15844:60;15921:18;;37767:80:0::1;15591:354:1::0;37767:80:0::1;37878:6;37860:14;;:24;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;37908:10:0::1;37895:24;::::0;;;:12:::1;:24;::::0;;;;:34;;37923:6;;37895:24;:34:::1;::::0;37923:6;;37895:34:::1;:::i;:::-;::::0;;;-1:-1:-1;37947:6:0::1;::::0;-1:-1:-1;37942:75:0::1;37959:6;37955:1;:10;37942:75;;;37987:18;37994:10;37987:6;:18::i;:::-;37967:3:::0;::::1;::::0;::::1;:::i;:::-;;;;37942:75;;;;37610:414:::0;;;;;:::o;22337:231::-;22401:7;22437:16;;;:7;:16;;;;;;-1:-1:-1;;;;;22437:16:0;22472:19;22464:73;;;;-1:-1:-1;;;22464:73:0;;18109:2:1;22464:73:0;;;18091:21:1;18148:2;18128:18;;;18121:30;18187:34;18167:18;;;18160:62;18258:11;18238:18;;;18231:39;18287:19;;22464:73:0;17907:405:1;21002:21:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22073:202::-;22139:7;-1:-1:-1;;;;;22167:19:0;;22159:74;;;;-1:-1:-1;;;22159:74:0;;17698:2:1;22159:74:0;;;17680:21:1;17737:2;17717:18;;;17710:30;17776:34;17756:18;;;17749:62;17847:12;17827:18;;;17820:40;17877:19;;22159:74:0;17496:406:1;22159:74:0;-1:-1:-1;;;;;;22251:16:0;;;;;:9;:16;;;;;;;22073:202::o;1673:96::-;1255:10;1244:7;1070;1097:6;-1:-1:-1;;;;;1097:6:0;;1024:87;1244:7;-1:-1:-1;;;;;1244:21:0;;1236:66;;;;-1:-1:-1;;;1236:66:0;;20395:2:1;1236:66:0;;;20377:21:1;;;20414:18;;;20407:30;20473:34;20453:18;;;20446:62;20525:18;;1236:66:0;20193:356:1;1236:66:0;1740:21:::1;1758:1;1740:9;:21::i;:::-;1673:96::o:0;36008:207::-;1255:10;1244:7;1070;1097:6;-1:-1:-1;;;;;1097:6:0;;1024:87;1244:7;-1:-1:-1;;;;;1244:21:0;;1236:66;;;;-1:-1:-1;;;1236:66:0;;20395:2:1;1236:66:0;;;20377:21:1;;;20414:18;;;20407:30;20473:34;20453:18;;;20446:62;20525:18;;1236:66:0;20193:356:1;1236:66:0;36095:16:::1;::::0;;36122:29;;;;36167:40:::1;::::0;36141:10;;36095:16;;36167:40:::1;::::0;36083:9:::1;::::0;36167:40:::1;36072:143;36008:207:::0;:::o;35805:195::-;1255:10;1244:7;1070;1097:6;-1:-1:-1;;;;;1097:6:0;;1024:87;1244:7;-1:-1:-1;;;;;1244:21:0;;1236:66;;;;-1:-1:-1;;;1236:66:0;;20395:2:1;1236:66:0;;;20377:21:1;;;20414:18;;;20407:30;20473:34;20453:18;;;20446:62;20525:18;;1236:66:0;20193:356:1;1236:66:0;35889:13:::1;::::0;;35913:26;;;;35955:37:::1;::::0;35929:10;;35889:13;;35955:37:::1;::::0;35877:9:::1;::::0;35955:37:::1;35866:134;35805:195:::0;:::o;37185:417::-;37248:14;;37264:13;;36719:1;36703:13;:17;36695:57;;;;-1:-1:-1;;;36695:57:0;;22699:2:1;36695:57:0;;;22681:21:1;22738:2;22718:18;;;22711:30;22777:29;22757:18;;;22750:57;22824:18;;36695:57:0;22497:351:1;36695:57:0;36784:5;36771:9;:18;36763:57;;;;-1:-1:-1;;;36763:57:0;;16152:2:1;36763:57:0;;;16134:21:1;16191:2;16171:18;;;16164:30;16230:28;16210:18;;;16203:56;16276:18;;36763:57:0;15950:350:1;36763:57:0;37298:14:::1;::::0;::::1;;37290:51;;;::::0;-1:-1:-1;;;37290:51:0;;16920:2:1;37290:51:0::1;::::0;::::1;16902:21:1::0;16959:2;16939:18;;;16932:30;16998:26;16978:18;;;16971:54;17042:18;;37290:51:0::1;16718:348:1::0;37290:51:0::1;37360:31;37375:10;37387:3;;37360:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;37360:14:0::1;::::0;-1:-1:-1;;;37360:31:0:i:1;:::-;37352:65;;;::::0;-1:-1:-1;;;37352:65:0;;22349:2:1;37352:65:0::1;::::0;::::1;22331:21:1::0;22388:2;22368:18;;;22361:30;22427:23;22407:18;;;22400:51;22468:18;;37352:65:0::1;22147:345:1::0;37352:65:0::1;37449:10;37436:24;::::0;;;:12:::1;:24;::::0;;;;;:29;37428:71:::1;;;::::0;-1:-1:-1;;;37428:71:0;;20037:2:1;37428:71:0::1;::::0;::::1;20019:21:1::0;20076:2;20056:18;;;20049:30;20115:31;20095:18;;;20088:59;20164:18;;37428:71:0::1;19835:353:1::0;37428:71:0::1;37512:14;:16:::0;;;:14:::1;:16;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;37552:10:0::1;37539:24;::::0;;;:12:::1;:24;::::0;;;;:26;;;::::1;::::0;::::1;:::i;:::-;;;;;;37576:18;37583:10;37576:6;:18::i;:::-;37185:417:::0;;;;:::o;34973:273::-;1255:10;1244:7;1070;1097:6;-1:-1:-1;;;;;1097:6:0;;1024:87;1244:7;-1:-1:-1;;;;;1244:21:0;;1236:66;;;;-1:-1:-1;;;1236:66:0;;20395:2:1;1236:66:0;;;20377:21:1;;;20414:18;;;20407:30;20473:34;20453:18;;;20446:62;20525:18;;1236:66:0;20193:356:1;1236:66:0;35080:4:::1;35059:17;;35050:6;:26;;;;:::i;:::-;:34;;35042:75;;;::::0;-1:-1:-1;;;35042:75:0;;21574:2:1;35042:75:0::1;::::0;::::1;21556:21:1::0;21613:2;21593:18;;;21586:30;21652;21632:18;;;21625:58;21700:18;;35042:75:0::1;21372:352:1::0;35042:75:0::1;35140:14;::::0;;35165:23;;;;35204:34:::1;::::0;35182:6;;35140:14;;35204:34:::1;::::0;35128:9:::1;::::0;35204:34:::1;35031:215;34973:273:::0;:::o;41092:383::-;-1:-1:-1;;;;;41212:16:0;;41178:20;41212:16;;;:9;:16;;;;;;41152:13;;41178:20;41201:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41201:28:0;-1:-1:-1;41240:6:0;41249:11;;41178:51;;-1:-1:-1;41240:6:0;41249:15;;:11;;;;;41263:1;41249:15;:::i;:::-;41240:24;;;-1:-1:-1;41275:6:0;41308:1;41294:150;41315:1;41311;:5;41294:150;;;41356:5;-1:-1:-1;;;;;41342:19:0;:10;41350:1;41342:7;:10::i;:::-;-1:-1:-1;;;;;41342:19:0;;41338:95;;;41394:1;41382:6;41389:1;41382:9;;;;;;;;:::i;:::-;;;;;;;;;;:13;41414:3;;;;:::i;:::-;;;;41338:95;41318:3;;;;:::i;:::-;;;;41294:150;;;-1:-1:-1;41461:6:0;;41092:383;-1:-1:-1;;;;41092:383:0:o;24043:147::-;24132:50;24151:10;24163:8;24173;24132:18;:50::i;35328:282::-;1255:10;1244:7;1070;1097:6;-1:-1:-1;;;;;1097:6:0;;1024:87;1244:7;-1:-1:-1;;;;;1244:21:0;;1236:66;;;;-1:-1:-1;;;1236:66:0;;20395:2:1;1236:66:0;;;20377:21:1;;;20414:18;;;20407:30;20473:34;20453:18;;;20446:62;20525:18;;1236:66:0;20193:356:1;1236:66:0;35435:4:::1;35425:6;35408:14;;:23;;;;:::i;:::-;:31;;35400:72;;;::::0;-1:-1:-1;;;35400:72:0;;21574:2:1;35400:72:0::1;::::0;::::1;21556:21:1::0;21613:2;21593:18;;;21586:30;21652;21632:18;;;21625:58;21700:18;;35400:72:0::1;21372:352:1::0;35400:72:0::1;35495:17;::::0;;35523:26;;;;35565:37:::1;::::0;35543:6;;35495:17;;35565:37:::1;::::0;35483:9:::1;::::0;35565:37:::1;35389:221;35328:282:::0;:::o;34089:120::-;1255:10;1244:7;1070;1097:6;-1:-1:-1;;;;;1097:6:0;;1024:87;1244:7;-1:-1:-1;;;;;1244:21:0;;1236:66;;;;-1:-1:-1;;;1236:66:0;;20395:2:1;1236:66:0;;;20377:21:1;;;20414:18;;;20407:30;20473:34;20453:18;;;20446:62;20525:18;;1236:66:0;20193:356:1;1236:66:0;34164:11:::1;::::0;34178:1:::1;34164:11:::0;;;::::1;;;:15;34156:24;;;::::0;::::1;;34191:10;34198:2;34191:6;:10::i;35618:179::-:0;1255:10;1244:7;1070;1097:6;-1:-1:-1;;;;;1097:6:0;;1024:87;1244:7;-1:-1:-1;;;;;1244:21:0;;1236:66;;;;-1:-1:-1;;;1236:66:0;;20395:2:1;1236:66:0;;;20377:21:1;;;20414:18;;;20407:30;20473:34;20453:18;;;20446:62;20525:18;;1236:66:0;20193:356:1;1236:66:0;35701:8:::1;::::0;;35720:21;;;;35757:32:::1;::::0;35731:10;;35701:8;;35757:32:::1;::::0;35689:9:::1;::::0;35757:32:::1;35678:119;35618:179:::0;:::o;25610:318::-;25777:39;25796:10;25808:7;25777:18;:39::i;:::-;25769:101;;;;-1:-1:-1;;;25769:101:0;;21931:2:1;25769:101:0;;;21913:21:1;21970:2;21950:18;;;21943:30;22009:34;21989:18;;;21982:62;22080:19;22060:18;;;22053:47;22117:19;;25769:101:0;21729:413:1;25769:101:0;25881:39;25895:4;25901:2;25905:7;25914:5;25881:13;:39::i;24669:112::-;1255:10;1244:7;1070;1097:6;-1:-1:-1;;;;;1097:6:0;;1024:87;1244:7;-1:-1:-1;;;;;1244:21:0;;1236:66;;;;-1:-1:-1;;;1236:66:0;;20395:2:1;1236:66:0;;;20377:21:1;;;20414:18;;;20407:30;20473:34;20453:18;;;20446:62;20525:18;;1236:66:0;20193:356:1;1236:66:0;24746:20:::1;:27:::0;;;::::1;-1:-1:-1::0;;;;;24746:27:0;;;::::1;::::0;;;::::1;::::0;;24669:112::o;22977:259::-;27434:4;27458:16;;;:7;:16;;;;;;23044:13;;-1:-1:-1;;;;;27458:16:0;23070:76;;;;-1:-1:-1;;;23070:76:0;;20756:2:1;23070:76:0;;;20738:21:1;20795:2;20775:18;;;20768:30;20834:34;20814:18;;;20807:62;20905:17;20885:18;;;20878:45;20940:19;;23070:76:0;20554:411:1;23070:76:0;23190:7;23199:18;:7;:16;:18::i;:::-;23173:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23159:69;;22977:259;;;:::o;40925:159::-;1255:10;1244:7;1070;1097:6;-1:-1:-1;;;;;1097:6:0;;1024:87;1244:7;-1:-1:-1;;;;;1244:21:0;;1236:66;;;;-1:-1:-1;;;1236:66:0;;20395:2:1;1236:66:0;;;20377:21:1;;;20414:18;;;20407:30;20473:34;20453:18;;;20446:62;20525:18;;1236:66:0;20193:356:1;1236:66:0;40983:7:::1;:15:::0;;41061;41009:22;;;41061:15;;::::1;40983;41061;41060:16;41042:34;::::0;;;;::::1;::::0;;40925:159::o;24261:400::-;24474:20;;24518:28;;;;;-1:-1:-1;;;;;10146:55:1;;;24518:28:0;;;10128:74:1;24350:4:0;;24474:20;;;24510:49;;;;24474:20;;24518:21;;10101:18:1;;24518:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24510:49:0;;24506:93;;;24583:4;24576:11;;;;;24506:93;-1:-1:-1;;;;;;;24618:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;24261:400::o;1924:194::-;1255:10;1244:7;1070;1097:6;-1:-1:-1;;;;;1097:6:0;;1024:87;1244:7;-1:-1:-1;;;;;1244:21:0;;1236:66;;;;-1:-1:-1;;;1236:66:0;;20395:2:1;1236:66:0;;;20377:21:1;;;20414:18;;;20407:30;20473:34;20453:18;;;20446:62;20525:18;;1236:66:0;20193:356:1;1236:66:0;-1:-1:-1;;;;;2015:22:0;::::1;2007:73;;;::::0;-1:-1:-1;;;2007:73:0;;13462:2:1;2007:73:0::1;::::0;::::1;13444:21:1::0;13501:2;13481:18;;;13474:30;13540:34;13520:18;;;13513:62;13611:8;13591:18;;;13584:36;13637:19;;2007:73:0::1;13260:402:1::0;2007:73:0::1;2091:19;2101:8;2091:9;:19::i;21704:305::-:0;21806:4;21843:40;;;21858:25;21843:40;;:105;;-1:-1:-1;21900:48:0;;;21915:33;21900:48;21843:105;:158;;;-1:-1:-1;14013:25:0;13998:40;;;;21965:36;13889:157;30236:174;30311:24;;;;:15;:24;;;;;:29;;;;-1:-1:-1;;;;;30311:29:0;;;;;;;;:24;;30365:23;30311:24;30365:14;:23::i;:::-;-1:-1:-1;;;;;30356:46:0;;;;;;;;;;;30236:174;;:::o;28887:383::-;28935:12;28950:11;;:15;;:11;;;;;28964:1;28950:15;:::i;:::-;-1:-1:-1;;;;;28978:13:0;;;;;;:9;:13;;;;;:15;;28935:30;;;;;;-1:-1:-1;28978:13:0;:15;;;:::i;:::-;;;;-1:-1:-1;;29004:16:0;;;;:7;:16;;;;;;:21;;;;-1:-1:-1;;;;;29004:21:0;;;;;;;;29041:33;;29004:16;;;29041:33;;29004:16;;29041:33;29085:11;:13;;;;;;;;:11;:13;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;29133:51;29164:1;29168:2;29172:7;29133:51;;;;;;;;;;;;:22;:51::i;:::-;29111:151;;;;-1:-1:-1;;;29111:151:0;;13043:2:1;29111:151:0;;;13025:21:1;13082:2;13062:18;;;13055:30;13121:34;13101:18;;;13094:62;13192:20;13172:18;;;13165:48;13230:19;;29111:151:0;12841:414:1;38478:260:0;38565:4;1097:6;;38656:25;;7454:66:1;7441:2;7437:15;;;7433:88;38656:25:0;;;7421:101:1;-1:-1:-1;;;;;1097:6:0;;;;38589:130;;38617:66;;7538:12:1;;38656:25:0;;;;;;;;;;;;;;38646:36;;38656:25;38646:36;;;;9629:66:1;9728:58:0;;;9617:79:1;9712:12;;;;9705:28;;;;9728:58:0;;;;;;;;;;9749:12:1;;;;9728:58:0;;;9718:69;;;;;;9526:269;38617:66;38698:10;38589:13;:130::i;:::-;-1:-1:-1;;;;;38589:141:0;;;38478:260;-1:-1:-1;;;38478:260:0:o;27663:341::-;27756:4;27458:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27458:16:0;27773:73;;;;-1:-1:-1;;;27773:73:0;;16507:2:1;27773:73:0;;;16489:21:1;16546:2;16526:18;;;16519:30;16585:34;16565:18;;;16558:62;16656:14;16636:18;;;16629:42;16688:19;;27773:73:0;16305:408:1;27773:73:0;27857:13;27873:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27873:16:0;;;;27908;;;;;:51;;;27952:7;-1:-1:-1;;;;;27928:31:0;:20;27940:7;27928:11;:20::i;:::-;-1:-1:-1;;;;;27928:31:0;;27908:51;:87;;;;27963:32;27980:5;27987:7;27963:16;:32::i;:::-;27900:96;27663:341;-1:-1:-1;;;;27663:341:0:o;29607:511::-;29739:16;;;;:7;:16;;;;;;-1:-1:-1;;;;;29739:24:0;;;:16;;:24;29731:74;;;;-1:-1:-1;;;29731:74:0;;13869:2:1;29731:74:0;;;13851:21:1;13908:2;13888:18;;;13881:30;13947:34;13927:18;;;13920:62;14018:7;13998:18;;;13991:35;14043:19;;29731:74:0;13667:401:1;29731:74:0;-1:-1:-1;;;;;29824:16:0;;29816:65;;;;-1:-1:-1;;;29816:65:0;;14682:2:1;29816:65:0;;;14664:21:1;14721:2;14701:18;;;14694:30;14760:34;14740:18;;;14733:62;14831:6;14811:18;;;14804:34;14855:19;;29816:65:0;14480:400:1;29816:65:0;29946:29;29963:1;29967:7;29946:8;:29::i;:::-;-1:-1:-1;;;;;29988:15:0;;;;;;:9;:15;;;;;:17;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;30016:13:0;;;;;;:9;:13;;;;;:15;;;;;;:::i;:::-;;;;-1:-1:-1;;30044:16:0;;;;:7;:16;;;;;;:21;;;;-1:-1:-1;;;;;30044:21:0;;;;;;;;;30083:27;;30044:16;;30083:27;;;;;;;29607:511;;;:::o;38032:173::-;38101:7;;;;;;;38093:46;;;;-1:-1:-1;;;38093:46:0;;23055:2:1;38093:46:0;;;23037:21:1;23094:2;23074:18;;;23067:30;23133:28;23113:18;;;23106:56;23179:18;;38093:46:0;22853:350:1;38093:46:0;38158:22;38164:10;38176:3;;38158:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38158:5:0;;-1:-1:-1;;;38158:22:0:i;:::-;38150:47;;;;-1:-1:-1;;;38150:47:0;;18519:2:1;38150:47:0;;;18501:21:1;18558:2;18538:18;;;18531:30;18597:14;18577:18;;;18570:42;18629:18;;38150:47:0;18317:336:1;2126:173:0;2182:16;2201:6;;-1:-1:-1;;;;;2218:17:0;;;;;;;;;;2251:40;;2201:6;;;;;;;2251:40;;2182:16;2251:40;2171:128;2126:173;:::o;30552:315::-;30707:8;-1:-1:-1;;;;;30698:17:0;:5;-1:-1:-1;;;;;30698:17:0;;;30690:55;;;;-1:-1:-1;;;30690:55:0;;15087:2:1;30690:55:0;;;15069:21:1;15126:2;15106:18;;;15099:30;15165:27;15145:18;;;15138:55;15210:18;;30690:55:0;14885:349:1;30690:55:0;-1:-1:-1;;;;;30756:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;;;;;;;;;;;;30818:41;;11808::1;;;30818::0;;11781:18:1;30818:41:0;;;;;;;30552:315;;;:::o;26810:::-;26967:28;26977:4;26983:2;26987:7;26967:9;:28::i;:::-;27014:48;27037:4;27043:2;27047:7;27056:5;27014:22;:48::i;:::-;27006:111;;;;-1:-1:-1;;;27006:111:0;;13043:2:1;27006:111:0;;;13025:21:1;13082:2;13062:18;;;13055:30;13121:34;13101:18;;;13094:62;13192:20;13172:18;;;13165:48;13230:19;;27006:111:0;12841:414:1;2528:723:0;2584:13;2805:10;2801:53;;-1:-1:-1;;2832:10:0;;;;;;;;;;;;;;;;;;2528:723::o;2801:53::-;2879:5;2864:12;2920:78;2927:9;;2920:78;;2953:8;;;;:::i;:::-;;-1:-1:-1;2976:10:0;;-1:-1:-1;2984:2:0;2976:10;;:::i;:::-;;;2920:78;;;3008:19;3040:6;3030:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3030:17:0;;3008:39;;3058:154;3065:10;;3058:154;;3092:11;3102:1;3092:11;;:::i;:::-;;-1:-1:-1;3161:10:0;3169:2;3161:5;:10;:::i;:::-;3148:24;;:2;:24;:::i;:::-;3135:39;;3118:6;3125;3118:14;;;;;;;;:::i;:::-;;;;:56;;;;;;;;;;-1:-1:-1;3189:11:0;3198:2;3189:11;;:::i;:::-;;;3058:154;;31432:797;31587:4;-1:-1:-1;;;;;31608:13:0;;10869:20;10917:8;31604:618;;31644:70;;;;;-1:-1:-1;;;;;31644:36:0;;;;;:70;;31681:10;;31693:4;;31699:7;;31708:5;;31644:70;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31644:70:0;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31640:527;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31884:13:0;;31880:272;;31927:60;;-1:-1:-1;;;31927:60:0;;13043:2:1;31927:60:0;;;13025:21:1;13082:2;13062:18;;;13055:30;13121:34;13101:18;;;13094:62;13192:20;13172:18;;;13165:48;13230:19;;31927:60:0;12841:414:1;31880:272:0;32102:6;32096:13;32087:6;32083:2;32079:15;32072:38;31640:527;31765:51;;31775:41;31765:51;;-1:-1:-1;31758:58:0;;31604:618;-1:-1:-1;32206:4:0;31432:797;;;;;;:::o;6721:182::-;6799:7;6820:17;6841:27;6852:4;6858:9;6841:10;:27::i;38213:257::-;38291:4;1097:6;;38382:31;;7824:66:1;7811:2;7807:15;;;7803:88;38382:31:0;;;7791:101:1;7922:4;7908:12;;;7901:26;-1:-1:-1;;;;;1097:6:0;;;;38315:136;;38343:72;;7943:12:1;;38382:31:0;7561:400:1;4662:1257:0;4743:7;4963:9;:16;4983:2;4963:22;4959:953;;;5259:4;5244:20;;5238:27;5309:4;5294:20;;5288:27;5367:4;5352:20;;5346:27;5002:9;5338:36;5410:25;5421:4;5338:36;5238:27;5288;5410:10;:25::i;:::-;5403:32;;;;;;;4959:953;5457:9;:16;5477:2;5457:22;5453:459;;;5732:4;5717:20;;5711:27;5783:4;5768:20;;5762:27;5825:23;5836:4;5711:27;5762;5825:10;:23::i;:::-;5818:30;;;;;;5453:459;-1:-1:-1;5897:1:0;5881:19;;7725:1501;7856:7;8776:66;8763:79;;8759:131;;;-1:-1:-1;8875:1:0;8859:19;;8759:131;8904:1;:7;;8909:2;8904:7;;:18;;;;;8915:1;:7;;8920:2;8915:7;;8904:18;8900:70;;;-1:-1:-1;8955:1:0;8939:19;;8900:70;9084:24;;;9067:14;9084:24;;;;;;;;;12441:25:1;;;12514:4;12502:17;;12482:18;;;12475:45;;;;12536:18;;;12529:34;;;12579:18;;;12572:34;;;9084:24:0;;12413:19:1;;9084:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9084:24:0;;;;;;-1:-1:-1;;;;;;;9123:20:0;;9119:72;;9176:1;9160:19;;;;;9119:72;9211:6;7725:1501;-1:-1:-1;;;;;7725:1501:0:o;7166:377::-;7280:7;7375:66;7367:75;;7469:3;7465:12;;;7479:2;7461:21;7510:25;7521:4;7461:21;7530:1;7367:75;7510:10;:25::i;:::-;7503:32;7166:377;-1:-1:-1;;;;;;7166:377:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:347:1;65:8;75:6;129:3;122:4;114:6;110:17;106:27;96:55;;147:1;144;137:12;96:55;-1:-1:-1;170:20:1;;213:18;202:30;;199:50;;;245:1;242;235:12;199:50;282:4;274:6;270:17;258:29;;334:3;327:4;318:6;310;306:19;302:30;299:39;296:59;;;351:1;348;341:12;366:777;408:5;461:3;454:4;446:6;442:17;438:27;428:55;;479:1;476;469:12;428:55;515:6;502:20;541:18;578:2;574;571:10;568:36;;;584:18;;:::i;:::-;718:2;712:9;780:4;772:13;;623:66;768:22;;;792:2;764:31;760:40;748:53;;;816:18;;;836:22;;;813:46;810:72;;;862:18;;:::i;:::-;902:10;898:2;891:22;937:2;929:6;922:18;983:3;976:4;971:2;963:6;959:15;955:26;952:35;949:55;;;1000:1;997;990:12;949:55;1064:2;1057:4;1049:6;1045:17;1038:4;1030:6;1026:17;1013:54;1111:1;1104:4;1099:2;1091:6;1087:15;1083:26;1076:37;1131:6;1122:15;;;;;;366:777;;;;:::o;1148:247::-;1207:6;1260:2;1248:9;1239:7;1235:23;1231:32;1228:52;;;1276:1;1273;1266:12;1228:52;1315:9;1302:23;1334:31;1359:5;1334:31;:::i;1400:388::-;1468:6;1476;1529:2;1517:9;1508:7;1504:23;1500:32;1497:52;;;1545:1;1542;1535:12;1497:52;1584:9;1571:23;1603:31;1628:5;1603:31;:::i;:::-;1653:5;-1:-1:-1;1710:2:1;1695:18;;1682:32;1723:33;1682:32;1723:33;:::i;:::-;1775:7;1765:17;;;1400:388;;;;;:::o;1793:456::-;1870:6;1878;1886;1939:2;1927:9;1918:7;1914:23;1910:32;1907:52;;;1955:1;1952;1945:12;1907:52;1994:9;1981:23;2013:31;2038:5;2013:31;:::i;:::-;2063:5;-1:-1:-1;2120:2:1;2105:18;;2092:32;2133:33;2092:32;2133:33;:::i;:::-;1793:456;;2185:7;;-1:-1:-1;;;2239:2:1;2224:18;;;;2211:32;;1793:456::o;2254:665::-;2349:6;2357;2365;2373;2426:3;2414:9;2405:7;2401:23;2397:33;2394:53;;;2443:1;2440;2433:12;2394:53;2482:9;2469:23;2501:31;2526:5;2501:31;:::i;:::-;2551:5;-1:-1:-1;2608:2:1;2593:18;;2580:32;2621:33;2580:32;2621:33;:::i;:::-;2673:7;-1:-1:-1;2727:2:1;2712:18;;2699:32;;-1:-1:-1;2782:2:1;2767:18;;2754:32;2809:18;2798:30;;2795:50;;;2841:1;2838;2831:12;2795:50;2864:49;2905:7;2896:6;2885:9;2881:22;2864:49;:::i;:::-;2854:59;;;2254:665;;;;;;;:::o;2924:416::-;2989:6;2997;3050:2;3038:9;3029:7;3025:23;3021:32;3018:52;;;3066:1;3063;3056:12;3018:52;3105:9;3092:23;3124:31;3149:5;3124:31;:::i;:::-;3174:5;-1:-1:-1;3231:2:1;3216:18;;3203:32;3273:15;;3266:23;3254:36;;3244:64;;3304:1;3301;3294:12;3345:455;3422:6;3430;3483:2;3471:9;3462:7;3458:23;3454:32;3451:52;;;3499:1;3496;3489:12;3451:52;3538:9;3525:23;3557:31;3582:5;3557:31;:::i;:::-;3607:5;-1:-1:-1;3663:2:1;3648:18;;3635:32;3690:18;3679:30;;3676:50;;;3722:1;3719;3712:12;3676:50;3745:49;3786:7;3777:6;3766:9;3762:22;3745:49;:::i;:::-;3735:59;;;3345:455;;;;;:::o;3805:315::-;3873:6;3881;3934:2;3922:9;3913:7;3909:23;3905:32;3902:52;;;3950:1;3947;3940:12;3902:52;3989:9;3976:23;4008:31;4033:5;4008:31;:::i;:::-;4058:5;4110:2;4095:18;;;;4082:32;;-1:-1:-1;;;3805:315:1:o;4125:245::-;4183:6;4236:2;4224:9;4215:7;4211:23;4207:32;4204:52;;;4252:1;4249;4242:12;4204:52;4291:9;4278:23;4310:30;4334:5;4310:30;:::i;4375:249::-;4444:6;4497:2;4485:9;4476:7;4472:23;4468:32;4465:52;;;4513:1;4510;4503:12;4465:52;4545:9;4539:16;4564:30;4588:5;4564:30;:::i;4629:409::-;4699:6;4707;4760:2;4748:9;4739:7;4735:23;4731:32;4728:52;;;4776:1;4773;4766:12;4728:52;4816:9;4803:23;4849:18;4841:6;4838:30;4835:50;;;4881:1;4878;4871:12;4835:50;4920:58;4970:7;4961:6;4950:9;4946:22;4920:58;:::i;:::-;4997:8;;4894:84;;-1:-1:-1;4629:409:1;-1:-1:-1;;;;4629:409:1:o;5043:477::-;5122:6;5130;5138;5191:2;5179:9;5170:7;5166:23;5162:32;5159:52;;;5207:1;5204;5197:12;5159:52;5247:9;5234:23;5280:18;5272:6;5269:30;5266:50;;;5312:1;5309;5302:12;5266:50;5351:58;5401:7;5392:6;5381:9;5377:22;5351:58;:::i;:::-;5428:8;;5325:84;;-1:-1:-1;5510:2:1;5495:18;;;;5482:32;;5043:477;-1:-1:-1;;;;5043:477:1:o;5525:280::-;5624:6;5677:2;5665:9;5656:7;5652:23;5648:32;5645:52;;;5693:1;5690;5683:12;5645:52;5725:9;5719:16;5744:31;5769:5;5744:31;:::i;6225:180::-;6284:6;6337:2;6325:9;6316:7;6312:23;6308:32;6305:52;;;6353:1;6350;6343:12;6305:52;-1:-1:-1;6376:23:1;;6225:180;-1:-1:-1;6225:180:1:o;6410:248::-;6478:6;6486;6539:2;6527:9;6518:7;6514:23;6510:32;6507:52;;;6555:1;6552;6545:12;6507:52;-1:-1:-1;;6578:23:1;;;6648:2;6633:18;;;6620:32;;-1:-1:-1;6410:248:1:o;6663:316::-;6704:3;6742:5;6736:12;6769:6;6764:3;6757:19;6785:63;6841:6;6834:4;6829:3;6825:14;6818:4;6811:5;6807:16;6785:63;:::i;:::-;6893:2;6881:15;6898:66;6877:88;6868:98;;;;6968:4;6864:109;;6663:316;-1:-1:-1;;6663:316:1:o;6984:185::-;7026:3;7064:5;7058:12;7079:52;7124:6;7119:3;7112:4;7105:5;7101:16;7079:52;:::i;:::-;7147:16;;;;;6984:185;-1:-1:-1;;6984:185:1:o;7966:1416::-;8243:3;8272:1;8305:6;8299:13;8335:3;8357:1;8385:9;8381:2;8377:18;8367:28;;8445:2;8434:9;8430:18;8467;8457:61;;8511:4;8503:6;8499:17;8489:27;;8457:61;8537:2;8585;8577:6;8574:14;8554:18;8551:38;8548:222;;;8624:77;8619:3;8612:90;8725:4;8722:1;8715:15;8755:4;8750:3;8743:17;8548:222;8786:18;8813:162;;;;8989:1;8984:320;;;;8779:525;;8813:162;8861:66;8850:9;8846:82;8841:3;8834:95;8958:6;8953:3;8949:16;8942:23;;8813:162;;8984:320;24196:1;24189:14;;;24233:4;24220:18;;9079:1;9093:165;9107:6;9104:1;9101:13;9093:165;;;9185:14;;9172:11;;;9165:35;9228:16;;;;9122:10;;9093:165;;;9097:3;;9287:6;9282:3;9278:16;9271:23;;8779:525;;;;;;;9320:56;9345:30;9371:3;9363:6;9345:30;:::i;:::-;7246:7;7234:20;;7279:1;7270:11;;7174:113;10213:511;10407:4;-1:-1:-1;;;;;10517:2:1;10509:6;10505:15;10494:9;10487:34;10569:2;10561:6;10557:15;10552:2;10541:9;10537:18;10530:43;;10609:6;10604:2;10593:9;10589:18;10582:34;10652:3;10647:2;10636:9;10632:18;10625:31;10673:45;10713:3;10702:9;10698:19;10690:6;10673:45;:::i;11031:632::-;11202:2;11254:21;;;11324:13;;11227:18;;;11346:22;;;11173:4;;11202:2;11425:15;;;;11399:2;11384:18;;;11173:4;11468:169;11482:6;11479:1;11476:13;11468:169;;;11543:13;;11531:26;;11612:15;;;;11577:12;;;;11504:1;11497:9;11468:169;;;-1:-1:-1;11654:3:1;;11031:632;-1:-1:-1;;;;;;11031:632:1:o;12617:219::-;12766:2;12755:9;12748:21;12729:4;12786:44;12826:2;12815:9;12811:18;12803:6;12786:44;:::i;24249:224::-;24288:3;24316:6;24349:2;24346:1;24342:10;24379:2;24376:1;24372:10;24410:3;24406:2;24402:12;24397:3;24394:21;24391:47;;;24418:18;;:::i;:::-;24454:13;;24249:224;-1:-1:-1;;;;24249:224:1:o;24478:128::-;24518:3;24549:1;24545:6;24542:1;24539:13;24536:39;;;24555:18;;:::i;:::-;-1:-1:-1;24591:9:1;;24478:128::o;24611:120::-;24651:1;24677;24667:35;;24682:18;;:::i;:::-;-1:-1:-1;24716:9:1;;24611:120::o;24736:228::-;24776:7;24902:1;24834:66;24830:74;24827:1;24824:81;24819:1;24812:9;24805:17;24801:105;24798:131;;;24909:18;;:::i;:::-;-1:-1:-1;24949:9:1;;24736:228::o;24969:125::-;25009:4;25037:1;25034;25031:8;25028:34;;;25042:18;;:::i;:::-;-1:-1:-1;25079:9:1;;24969:125::o;25099:258::-;25171:1;25181:113;25195:6;25192:1;25189:13;25181:113;;;25271:11;;;25265:18;25252:11;;;25245:39;25217:2;25210:10;25181:113;;;25312:6;25309:1;25306:13;25303:48;;;-1:-1:-1;;25347:1:1;25329:16;;25322:27;25099:258::o;25362:196::-;25401:3;25429:5;25419:39;;25438:18;;:::i;:::-;-1:-1:-1;25485:66:1;25474:78;;25362:196::o;25563:437::-;25642:1;25638:12;;;;25685;;;25706:61;;25760:4;25752:6;25748:17;25738:27;;25706:61;25813:2;25805:6;25802:14;25782:18;25779:38;25776:218;;;25850:77;25847:1;25840:88;25951:4;25948:1;25941:15;25979:4;25976:1;25969:15;25776:218;;25563:437;;;:::o;26005:197::-;26043:3;26071:6;26112:2;26105:5;26101:14;26139:2;26130:7;26127:15;26124:41;;;26145:18;;:::i;:::-;26194:1;26181:15;;26005:197;-1:-1:-1;;;26005:197:1:o;26207:195::-;26246:3;26277:66;26270:5;26267:77;26264:103;;;26347:18;;:::i;:::-;-1:-1:-1;26394:1:1;26383:13;;26207:195::o;26407:112::-;26439:1;26465;26455:35;;26470:18;;:::i;:::-;-1:-1:-1;26504:9:1;;26407:112::o;26524:184::-;26576:77;26573:1;26566:88;26673:4;26670:1;26663:15;26697:4;26694:1;26687:15;26713:184;26765:77;26762:1;26755:88;26862:4;26859:1;26852:15;26886:4;26883:1;26876:15;26902:184;26954:77;26951:1;26944:88;27051:4;27048:1;27041:15;27075:4;27072:1;27065:15;27091:184;27143:77;27140:1;27133:88;27240:4;27237:1;27230:15;27264:4;27261:1;27254:15;27280:154;-1:-1:-1;;;;;27359:5:1;27355:54;27348:5;27345:65;27335:93;;27424:1;27421;27414:12;27439:177;27524:66;27517:5;27513:78;27506:5;27503:89;27493:117;;27606:1;27603;27596:12
Swarm Source
ipfs://3edceb71043ea9f3edddcc84337047fa5e376368d95f31901f3da26a617c7d02
Loading...
Loading
Loading...
Loading
[ 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.