Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
260 AFD
Holders
224
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 AFDLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
AimlessFishDynasty
Compiler Version
v0.8.7+commit.e28d00a7
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT /** :. . -==*#%*+=-. +=+#@*++*##%%#+=:. .:-. .%*%%**+++++++*@@= .+=: *.+% ++++#%#*******#=#==*+*#%#%%+- :*=+++*%%#*#***%#@#*****###%#+... .-+= :#-=+++++*%@%*##-=@#**%#+-+@*++##- .=##= .+-===++++++*#%#--=+@#*-::=*@***+=+#+. .:+= -+-++=.-*-====+++++++++*#*+=++----+#%*****+==##- .-*% #..:-+*+======+++++++++++====---=+%##*******%@##- .:*%++====-*=.:::-=======+++++++++++=====--++%@#******#**==##. .*+:--:--: .:::-=======+++++++++++====--++#%###********+=+@*:.. -*::::::...::-=======+++++++++++====+*##%@%%##**###****+=%%=:. .**@*-:: .:::-======++++++++=++*##%%#**##*%%%%%#*******+=%# +@@@=::..::-=======+**%@@%###*++++#+#*#*#**%%##*******+=%# . +*#@=:.::-=******#@@%#**===%====+++*===+#*#%@%##******++@+ *:.#+=+@#***++====+##*+===++**#*======+===+***#*#@%%###***=#@. #=**+=-+*=========++===+**+===**======+==+++*+####@##****#**@+ *+=-*##+=============**++*%=-=#*=========+*+*+*##*#@##***#*+: .%+ *@+##+=========***#@= %:==%+============++=****%%#*****+%# =**+:@++%#=======+#+- %@*=@.*#+=============++=+*#%#@%#*****@* *=:+==@@+=*=====**: #@@@*+*+==========++=====+*##*@#*****%@. *-:-===+:.=====++:....:*#*++=++++++====*+#===+#++***@#****#@= +=:-========================+*+###*+=+**##====+++*#%@#***#@- :#:===========================#@@#**+++*%+====*****%%*#*%%=- *-=========================*%@@@#++++**+====+%####%#*%@+ -*=====================+*%@@@@@#+==+++=====+*######*#%. *+=================+*#%@@@@@@@@#+==========++***%####**: ++=========++**##%@@@@@@@@@@@%*+==========+***#@%%##**+# .:: .:--++-=*#%%%@@@@@@@@@@*=---=#%#++========++***#%%%@%*##**+- =+- .:+=::-#***:::-+#%@%@@*-:=-:::-+**+=========++***#%%%%+-#****++- =+= ++==#+:::#**%***###%@=:=*****##**+==========++**#%%%%#= ******=# :*+ -*+++#====###%***####%+-===================++*#%%%%%+=: ******+ :+*--=**= -**+*%%%%%%%%#+::*-=================+*#%@@%*=. ...=++=: .::. .-=++: .. %:==============++##*+=:: ..==++++++*+++=:. +=-===========+*%*:=--=.*+++#=++****#****@%+ #:=========+*%*. #==+#+++******###*****#- -*-=======+*%: .#*****%*****#%#*****#+ ++-======+%- -#***#%*#**%%###**#*. ++-=====+%: :=+**%##%#%%%#*=. =*-====+*%. :=**@%*=-: .#+=====+#*-:.:-=+*++*=. -#*======+***++=+*#. :+##*+====++*#*: :-=====-: * Date: March 17th, 2022 * * ☘️Happy Saint Patrick's Day! * * The Aimless Fish Dynasty is dedicated to my ever beautiful Wife, Stephanie, and our three amazing children. Hi Steph! I love you with all my heart. * ❤️ LHK FOREVER * * As I move on from a family business which I personally experienced as toxic to my mental health (ultimately affecting my wife and kids), I want to make all who * may see this aware, that Stephanie has helped me climb out of the darkness with her energy, resilience, motivation, and get-it-done attitude. * She has shown me strength in all areas of life, and taught me to see beyond the darkness that had surrounded me in my professional life. * I am forever grateful to her for this and can't express it enough. I believe everyone needs a Stephanie! * * Life is mainly about creating yourself. Who are you going to be? How will others think of you? Have you perhaps lost the plot? * Surround yourself with inspiring, joyful people, like my Wife, and learn from them. I think this is how you live your best life. * * Finally, within this contract I have tried to share and be as open as possible with where we are going with the Aimless Fish Dynasty project. * I hard coded as much as my current knowledge allowed. Where my knowledge was lacking, I tried to leave fingerprints so you could make sure things occur as they should. * I hope you join on me and my family on this exciting new journey! * This is just the beginning. * * Founded, developed, and art by: @kenleybrowne * * AFD Dynasty DAO: 0x4c5260637C9D39919347C961fAb0fE4CEB79bCdf * AFD Genesis Fund: 0x23d5041C65151E80E13380f9266EA65FA6E37a8f * AFD Charity Fund: 0xE88d4a2c86094197036B3D7B7e22275a3A7C0b28 * */ pragma solidity ^0.8.7; import './ERC721Enumerable.sol'; import '@openzeppelin/contracts/access/Ownable.sol'; contract AimlessFishDynasty is ERC721Enumerable, Ownable { string public AFD_PROVENANCE; using Address for address; // This will help the starting and stopping of the sale and presale. bool public saleActive = false; bool public presaleActive = false; // This is the amount of tokens reserved for Free-minting, the team, giveaways, collabs and so forth. uint256 public reserved = 225; uint256 public tgcReserved = 30; // This is the price of each Aimless Fish Dynasty token. // Up to 28 Aimless Fish Dynasty tokens or 1% of all tokens may be minted at a time. uint256 public price = 0.035 ether; uint256 public freePrice = 0.0 ether; // Max Supply limits the maximum supply of Aimless Fish Dynasty tokens that can exist. // Free Max Supply allows up to 220 free mints to the community & public. uint256 constant max_SUPPLY = 2750; uint256 constant freeMAX_SUPPLY = 255; // Up to 220 for Free Mint + 30 Reserved + 5 tokens for the Founder, his wife, and their three little kiddos. // This is the base link that leads to the images of the Aimless Fish tokens. // This will be transitioned to IPFS after minting is complete. string public baseURI; // Allows us to set the provenance for the entire collection. function setProvenance(string memory provenance) public onlyOwner { AFD_PROVENANCE = provenance; } // This allows for gasless Opensea Listing. address public proxyRegistryAddress; // The following are the addresses for withdrawals. address public a1_DAO = 0x4c5260637C9D39919347C961fAb0fE4CEB79bCdf; // Aimless Fish Dynasty DAO address public a2_OMM = 0x3097617CbA85A26AdC214A1F87B680bE4b275cD0; // OMM&S Consulting and Marketing Team address public a3_DTC = 0xE88d4a2c86094197036B3D7B7e22275a3A7C0b28; // The AFD Charity Fund to Be Donated address public a4_ADT = 0xf770C9AC6bE46FF9D02e59945Ae54030A8A92d3F; // Founder @kenleybrowne // Additionally, the AFD Genesis Fund:0x23d5041C65151E80E13380f9266EA65FA6E37a8f will be set to receive secondary sales royalities on OS & LR. // 60% of the Genesis Fund will be forwarded to the DAO, while the final 40% will be used to further the project’s growth and development. // This is for reserved presale tokens. mapping (address => uint256) public presaleReserved; // This makes sure if someone already did a FREE mint, then they can no longer do so. We would love if you purchased one as well :) mapping(address => uint256) private _claimed; // This allows for gasless Opensea Listing. mapping(address => bool) public projectProxy; // This allows for gas(less) future collection approval for cross-collection interaction. mapping(address => bool) public proxyToApproved; // This initializes The Aimless Fish Dynasty contract and designates the name and symbol. constructor (string memory _baseURI, address _proxyRegistryAddress) ERC721("Aimless Fish Dynasty", "AFD") { baseURI = _baseURI; proxyRegistryAddress = _proxyRegistryAddress; // Kenley, the founder is gifting his Wife & three young kiddos the first four fish, plus retaining one for his continued access to the Dynasty. // These will be held in the his wallet and transfered to them in the future so they may access the Dynasty. _safeMint( a4_ADT, 0); _safeMint( a4_ADT, 1); _safeMint( a4_ADT, 2); _safeMint( a4_ADT, 3); _safeMint( a4_ADT, 4); } // To update the tokenURI. // All metadata & images will be on IPFS once mint is complete. function setBaseURI(string memory _baseURI) public onlyOwner { baseURI = _baseURI; } // function tokenURI(uint256 _tokenId) public view override returns (string memory) { require(_exists(_tokenId), "Token does not exist."); return string(abi.encodePacked(baseURI, Strings.toString(_tokenId))); } // This helps see which address owns which tokens. function tokensOfOwner(address addr) public view returns(uint256[] memory) { uint256 tokenCount = balanceOf(addr); uint256[] memory tokensId = new uint256[](tokenCount); for(uint256 i; i < tokenCount; i++){ tokensId[i] = tokenOfOwnerByIndex(addr, i); } return tokensId; } // This allows for gasless Opensea Listing. function setProxyRegistryAddress(address _proxyRegistryAddress) external onlyOwner { proxyRegistryAddress = _proxyRegistryAddress; } // This allows for gas(less) future collection approval for cross-collection interaction. function flipProxyState(address proxyAddress) public onlyOwner { projectProxy[proxyAddress] = !projectProxy[proxyAddress]; } // This is for the exclusive FREE-sale/Reserved presale minting ability. function mintPresale(uint256 _amount) public payable { uint256 supply = totalSupply(); uint256 reservedAmt = presaleReserved[msg.sender]; require( presaleActive, "The AFD presale isn't active yet." ); require( reservedAmt > 0, "There are no tokens reserved for your address." ); require( _amount <= reservedAmt, "You are not able to mint more than what is reserved to you." ); require( supply + _amount <= freeMAX_SUPPLY, "You are not able to mint more than the max supply of FREE Aimless Fish." ); require( msg.value == freePrice * _amount, "Opps! You sent the wrong amount of ETH." ); presaleReserved[msg.sender] = reservedAmt - _amount; for(uint256 i; i < _amount; i++){ _safeMint( msg.sender, supply + i ); } } // This is for the Public minting ability. function mintToken(uint256 _amount) public payable { uint256 supply = totalSupply(); require( saleActive, "The AFD public sale isn't active." ); require( supply + _amount <= max_SUPPLY, "You are not able to mint more than max supply of total Aimless Fish." ); require( _amount > 0 && _amount < 29, "You are able to mint between 1-28 AFD tokens at the same time." ); require( supply + _amount <= max_SUPPLY, "You are not able to mint more than max supply of total Aimless Fish." ); require( msg.value == price * _amount, "Opps! You sent the wrong amount of ETH." ); for(uint256 i; i < _amount; i++){ _safeMint( msg.sender, supply + i ); } } // This is for the FREE minting ability during public sale. // Important: The fish will no longer be free when the total fish minted, including paid mints, passes 255. Don't try or you risk losing your gas! function mintFREEToken(uint256 _amount) public payable { uint256 supply = totalSupply(); require( saleActive, "The AFD public sale isn't active." ); require( _claimed[msg.sender] == 0, "Your Free token is already claimed."); require( _amount > 0 && _amount < 2, "You are able to mint one (1) Free AFD token." ); require( supply + _amount <= freeMAX_SUPPLY, "You are not able to mint more than max supply of FREE Aimless Fish." ); require( msg.value == freePrice * _amount, "Opps! You sent the wrong amount of ETH." ); for(uint256 i; i < _amount; i++){ _claimed[msg.sender] += 1; _safeMint( msg.sender, supply + i ); } } // Admin minting function to reserve tokens for the team, collabs, customs and giveaways. function mintReserved(uint256 _amount) public onlyOwner { // Limited to a publicly set amount as shown above. require( _amount <= tgcReserved, "You are not able to reserve more than the set amount." ); tgcReserved -= _amount; uint256 supply = totalSupply(); for(uint256 i; i < _amount; i++){ _safeMint( msg.sender, supply + i ); } } // This lets us add to and edit reserved presale spots. function editPresaleReserved(address[] memory _a, uint256[] memory _amount) public onlyOwner { for(uint256 i; i < _a.length; i++){ presaleReserved[_a[i]] = _amount[i]; } } // This allows us to start and stop the AFD presale. function setPresaleActive(bool val) public onlyOwner { presaleActive = val; } // This allows us to start and stop the AFD Public sale. function setSaleActive(bool val) public onlyOwner { saleActive = val; } // This allows us to set a different selling price in case ETH changes drastically. function setPrice(uint256 newPrice) public onlyOwner { price = newPrice; } // Withdraw funds from inital sales for the team, DAO, Charity and founder. function withdrawTeam(uint256 amount) public payable onlyOwner { uint256 percent = amount / 100; require(payable(a1_DAO).send(percent * 33)); // 33% for the community-lead Aimless Fish Dynasty DAO. require(payable(a2_OMM).send(percent * 25)); // 25% for the OMM&S Consulting and Marketing Team. require(payable(a3_DTC).send(percent * 5)); // 5% to be Distributed to Charities that support Earth and Ocean conservation. require(payable(a4_ADT).send(percent * 38)); // 38% to further the project’s growth & development plus initial founders dev & marketing expenses. } // Allows gasless listing on Opensea and LooksRare. // Sumitted during Deployment of contract OS Mainnet: 0xa5409ec958c83c3f309868babaca7c86dcb077c1 // NOT CODED (added after contract is deployed) LooksRare Mainnet: 0xf42aa99F011A1fA7CDA90E5E98b277E306BcA83e // Also allows gas(less) future collection approval for cross-collection interaction including LooksRare. function isApprovedForAll(address _owner, address operator) public view override returns (bool) { OpenSeaProxyRegistry proxyRegistry = OpenSeaProxyRegistry(proxyRegistryAddress); if (address(proxyRegistry.proxies(_owner)) == operator || projectProxy[operator]) return true; return super.isApprovedForAll(_owner, operator); } } contract OwnableDelegateProxy { } contract OpenSeaProxyRegistry { mapping(address => OwnableDelegateProxy) public proxies; } /** * * Wherever you happen to be in the world, together, greater collective enlightenment is what we must strive for. * Thank you for joining me and my family on this journey. * Let's raise each other up. * * Cheers, * Kenley * */
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.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. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.7; import "./ERC721.sol"; import "@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol"; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account but rips out the core of the gas-wasting processing that comes from OpenZeppelin. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _owners.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < _owners.length, "ERC721Enumerable: global index out of bounds"); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256 tokenId) { require(index < balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); uint count; for(uint i; i < _owners.length; i++){ if(owner == _owners[i]){ if(count == index) return i; else count++; } } revert("ERC721Enumerable: owner index out of bounds"); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; import "../IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.7; import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol"; import "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol"; import "@openzeppelin/contracts/utils/Context.sol"; import "@openzeppelin/contracts/utils/Strings.sol"; import "@openzeppelin/contracts/utils/introspection/ERC165.sol"; import "./Address.sol"; abstract contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; string private _name; string private _symbol; // Mapping from token ID to owner address address[] internal _owners; mapping(uint256 => address) private _tokenApprovals; mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint) { require(owner != address(0), "ERC721: balance query for the zero address"); uint count; for( uint i; i < _owners.length; ++i ){ if( owner == _owners[i] ) ++count; } return count; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require( owner != address(0), "ERC721: owner query for nonexistent token" ); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require( _exists(tokenId), "ERC721: approved query for nonexistent token" ); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved" ); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved" ); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return tokenId < _owners.length && _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require( _exists(tokenId), "ERC721: operator query for nonexistent token" ); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _owners.push(to); emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _owners[tokenId] = address(0); emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require( ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own" ); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received( _msgSender(), from, tokenId, _data ) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert( "ERC721: transfer to non ERC721Receiver implementer" ); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.6; library Address { function isContract(address account) internal view returns (bool) { uint size; assembly { size := extcodesize(account) } return size > 0; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @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; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; import "../IERC721.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); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"},{"internalType":"address","name":"_proxyRegistryAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"AFD_PROVENANCE","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"a1_DAO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"a2_OMM","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"a3_DTC","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"a4_ADT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_a","type":"address[]"},{"internalType":"uint256[]","name":"_amount","type":"uint256[]"}],"name":"editPresaleReserved","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"proxyAddress","type":"address"}],"name":"flipProxyState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintFREEToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintPresale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintReserved","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presaleReserved","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"projectProxy","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxyRegistryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"proxyToApproved","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserved","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"val","type":"bool"}],"name":"setPresaleActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"provenance","type":"string"}],"name":"setProvenance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_proxyRegistryAddress","type":"address"}],"name":"setProxyRegistryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"val","type":"bool"}],"name":"setSaleActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tgcReserved","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawTeam","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526007805461ffff1916905560e1600855601e600955667c585087238000600a556000600b55600e80546001600160a01b0319908116734c5260637c9d39919347c961fab0fe4ceb79bcdf17909155600f80548216733097617cba85a26adc214a1f87b680be4b275cd017905560108054821673e88d4a2c86094197036b3d7b7e22275a3a7c0b281790556011805490911673f770c9ac6be46ff9d02e59945ae54030a8a92d3f179055348015620000ba57600080fd5b50604051620036c1380380620036c1833981016040819052620000dd91620006fd565b604080518082018252601481527f41696d6c65737320466973682044796e6173747900000000000000000000000060208083019182528351808501909452600384526210519160ea1b9084015281519192916200013d9160009162000607565b5080516200015390600190602084019062000607565b505050620001706200016a6200022360201b60201c565b62000227565b81516200018590600c90602085019062000607565b50600d80546001600160a01b0319166001600160a01b0383811691909117909155601154620001b79116600062000279565b601154620001d0906001600160a01b0316600162000279565b601154620001e9906001600160a01b0316600262000279565b60115462000202906001600160a01b0316600362000279565b6011546200021b906001600160a01b0316600462000279565b5050620008bc565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6200029b8282604051806020016040528060008152506200029f60201b60201c565b5050565b620002ab83836200031b565b620002ba600084848462000449565b620003165760405162461bcd60e51b81526020600482015260326024820152600080516020620036a183398151915260448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b60648201526084015b60405180910390fd5b505050565b6001600160a01b038216620003735760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016200030d565b6200037e81620005b2565b15620003cd5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016200030d565b6002805460018101825560009182527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0385169081179091556040518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006200046a846001600160a01b03166200060160201b62001c731760201c565b15620005a657604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290620004a4903390899088908890600401620007ca565b602060405180830381600087803b158015620004bf57600080fd5b505af1925050508015620004f2575060408051601f3d908101601f19168201909252620004ef91810190620006ca565b60015b6200058b573d80801562000523576040519150601f19603f3d011682016040523d82523d6000602084013e62000528565b606091505b508051620005835760405162461bcd60e51b81526020600482015260326024820152600080516020620036a183398151915260448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b60648201526084016200030d565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050620005aa565b5060015b949350505050565b60025460009082108015620005fb575060006001600160a01b031660028381548110620005e357620005e362000890565b6000918252602090912001546001600160a01b031614155b92915050565b3b151590565b828054620006159062000853565b90600052602060002090601f01602090048101928262000639576000855562000684565b82601f106200065457805160ff191683800117855562000684565b8280016001018555821562000684579182015b828111156200068457825182559160200191906001019062000667565b506200069292915062000696565b5090565b5b8082111562000692576000815560010162000697565b80516001600160a01b0381168114620006c557600080fd5b919050565b600060208284031215620006dd57600080fd5b81516001600160e01b031981168114620006f657600080fd5b9392505050565b600080604083850312156200071157600080fd5b82516001600160401b03808211156200072957600080fd5b818501915085601f8301126200073e57600080fd5b815181811115620007535762000753620008a6565b604051601f8201601f19908116603f011681019083821181831017156200077e576200077e620008a6565b816040528281528860208487010111156200079857600080fd5b620007ab83602083016020880162000820565b8096505050505050620007c160208401620006ad565b90509250929050565b600060018060a01b038087168352808616602084015250836040830152608060608301528251806080840152620008098160a085016020870162000820565b601f01601f19169190910160a00195945050505050565b60005b838110156200083d57818101518382015260200162000823565b838111156200084d576000848401525b50505050565b600181811c908216806200086857607f821691505b602082108114156200088a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b612dd580620008cc6000396000f3fe6080604052600436106102ae5760003560e01c80638462151c11610175578063cd7c0326116100dc578063f73c814b11610095578063fc2756981161006f578063fc27569814610843578063fd2b049214610863578063fe60d12c14610876578063ffe630b51461088c57600080fd5b8063f73c814b146107fb578063f759867a1461081b578063fa5cb60c1461082e57600080fd5b8063cd7c03261461073b578063d26ea6c01461075b578063e985e9c51461077b578063eb0353901461079b578063f2fde38b146107bb578063f478da7b146107db57600080fd5b80639dc38c7d1161012e5780639dc38c7d14610682578063a035b1fe146106b2578063a22cb465146106c8578063b88d4fde146106e8578063c634d03214610708578063c87b56dd1461071b57600080fd5b80638462151c146105cc5780638da5cb5b146105f957806391b7f5ed1461061757806394bba2451461063757806395d89b411461064d5780639a5d140b1461066257600080fd5b806350da01cc116102195780636ac8bf4d116101d25780636ac8bf4d1461052f5780636b2fd865146105425780636c0360eb1461056257806370a0823114610577578063715018a614610597578063841718a6146105ac57600080fd5b806350da01cc1461047057806353135ca01461048657806355f804b3146104a55780635bab26e2146104c55780636352211e146104f557806368428a1b1461051557600080fd5b806323b872dd1161026b57806323b872dd146103a35780632f745c59146103c357806339c36fa0146103e35780633f8121a21461041057806342842e0e146104305780634f6ccce71461045057600080fd5b806301ffc9a7146102b357806306fdde03146102e8578063081812fc1461030a578063095ea7b31461034257806318160ddd146103645780631ed7dd0714610383575b600080fd5b3480156102bf57600080fd5b506102d36102ce366004612770565b6108ac565b60405190151581526020015b60405180910390f35b3480156102f457600080fd5b506102fd6108d7565b6040516102df9190612999565b34801561031657600080fd5b5061032a610325366004612810565b610969565b6040516001600160a01b0390911681526020016102df565b34801561034e57600080fd5b5061036261035d366004612660565b6109f6565b005b34801561037057600080fd5b506002545b6040519081526020016102df565b34801561038f57600080fd5b50600f5461032a906001600160a01b031681565b3480156103af57600080fd5b506103626103be36600461256a565b610b0c565b3480156103cf57600080fd5b506103756103de366004612660565b610b3d565b3480156103ef57600080fd5b506103756103fe36600461250d565b60126020526000908152604090205481565b34801561041c57600080fd5b5061036261042b366004612755565b610bf0565b34801561043c57600080fd5b5061036261044b36600461256a565b610c34565b34801561045c57600080fd5b5061037561046b366004612810565b610c4f565b34801561047c57600080fd5b50610375600b5481565b34801561049257600080fd5b506007546102d390610100900460ff1681565b3480156104b157600080fd5b506103626104c03660046127c7565b610cbc565b3480156104d157600080fd5b506102d36104e036600461250d565b60146020526000908152604090205460ff1681565b34801561050157600080fd5b5061032a610510366004612810565b610cfd565b34801561052157600080fd5b506007546102d39060ff1681565b61036261053d366004612810565b610d89565b34801561054e57600080fd5b5061036261055d36600461268c565b610f8f565b34801561056e57600080fd5b506102fd611034565b34801561058357600080fd5b5061037561059236600461250d565b6110c2565b3480156105a357600080fd5b50610362611190565b3480156105b857600080fd5b506103626105c7366004612755565b6111c6565b3480156105d857600080fd5b506105ec6105e736600461250d565b611203565b6040516102df9190612955565b34801561060557600080fd5b506005546001600160a01b031661032a565b34801561062357600080fd5b50610362610632366004612810565b6112a5565b34801561064357600080fd5b5061037560095481565b34801561065957600080fd5b506102fd6112d4565b34801561066e57600080fd5b5061036261067d366004612810565b6112e3565b34801561068e57600080fd5b506102d361069d36600461250d565b60156020526000908152604090205460ff1681565b3480156106be57600080fd5b50610375600a5481565b3480156106d457600080fd5b506103626106e336600461262b565b6113c2565b3480156106f457600080fd5b506103626107033660046125ab565b611487565b610362610716366004612810565b6114bf565b34801561072757600080fd5b506102fd610736366004612810565b61161e565b34801561074757600080fd5b50600d5461032a906001600160a01b031681565b34801561076757600080fd5b5061036261077636600461250d565b61169f565b34801561078757600080fd5b506102d3610796366004612531565b6116eb565b3480156107a757600080fd5b5060115461032a906001600160a01b031681565b3480156107c757600080fd5b506103626107d636600461250d565b6117de565b3480156107e757600080fd5b5060105461032a906001600160a01b031681565b34801561080757600080fd5b5061036261081636600461250d565b611879565b610362610829366004612810565b6118cc565b34801561083a57600080fd5b506102fd611b07565b34801561084f57600080fd5b50600e5461032a906001600160a01b031681565b610362610871366004612810565b611b14565b34801561088257600080fd5b5061037560085481565b34801561089857600080fd5b506103626108a73660046127c7565b611c36565b60006001600160e01b0319821663780e9d6360e01b14806108d157506108d182611c79565b92915050565b6060600080546108e690612c92565b80601f016020809104026020016040519081016040528092919081815260200182805461091290612c92565b801561095f5780601f106109345761010080835404028352916020019161095f565b820191906000526020600020905b81548152906001019060200180831161094257829003601f168201915b5050505050905090565b600061097482611cc9565b6109da5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600360205260409020546001600160a01b031690565b6000610a0182610cfd565b9050806001600160a01b0316836001600160a01b03161415610a6f5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016109d1565b336001600160a01b0382161480610a8b5750610a8b81336116eb565b610afd5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016109d1565b610b078383611d13565b505050565b610b163382611d81565b610b325760405162461bcd60e51b81526004016109d190612b5e565b610b07838383611e43565b6000610b48836110c2565b8210610b665760405162461bcd60e51b81526004016109d1906129ac565b6000805b600254811015610bd75760028181548110610b8757610b87612d28565b6000918252602090912001546001600160a01b0386811691161415610bc55783821415610bb75791506108d19050565b81610bc181612ccd565b9250505b80610bcf81612ccd565b915050610b6a565b5060405162461bcd60e51b81526004016109d1906129ac565b6005546001600160a01b03163314610c1a5760405162461bcd60e51b81526004016109d190612a90565b600780549115156101000261ff0019909216919091179055565b610b0783838360405180602001604052806000815250611487565b6002546000908210610cb85760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016109d1565b5090565b6005546001600160a01b03163314610ce65760405162461bcd60e51b81526004016109d190612a90565b8051610cf990600c90602084019061239e565b5050565b60008060028381548110610d1357610d13612d28565b6000918252602090912001546001600160a01b03169050806108d15760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016109d1565b6000610d9460025490565b60075490915060ff16610db95760405162461bcd60e51b81526004016109d190612b1d565b3360009081526013602052604090205415610e225760405162461bcd60e51b815260206004820152602360248201527f596f7572204672656520746f6b656e20697320616c726561647920636c61696d60448201526232b21760e91b60648201526084016109d1565b600082118015610e325750600282105b610e935760405162461bcd60e51b815260206004820152602c60248201527f596f75206172652061626c6520746f206d696e74206f6e65202831292046726560448201526b329020a322103a37b5b2b71760a11b60648201526084016109d1565b60ff610e9f8383612c04565b1115610f0d5760405162461bcd60e51b81526020600482015260436024820152600080516020612d8083398151915260448201527f616e206d617820737570706c79206f6620465245452041696d6c65737320466960648201526239b41760e91b608482015260a4016109d1565b81600b54610f1b9190612c30565b3414610f395760405162461bcd60e51b81526004016109d190612a49565b60005b82811015610b0757336000908152601360205260408120805460019290610f64908490612c04565b90915550610f7d905033610f788385612c04565b611f99565b80610f8781612ccd565b915050610f3c565b6005546001600160a01b03163314610fb95760405162461bcd60e51b81526004016109d190612a90565b60005b8251811015610b0757818181518110610fd757610fd7612d28565b602002602001015160126000858481518110610ff557610ff5612d28565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550808061102c90612ccd565b915050610fbc565b600c805461104190612c92565b80601f016020809104026020016040519081016040528092919081815260200182805461106d90612c92565b80156110ba5780601f1061108f576101008083540402835291602001916110ba565b820191906000526020600020905b81548152906001019060200180831161109d57829003601f168201915b505050505081565b60006001600160a01b03821661112d5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016109d1565b6000805b600254811015611189576002818154811061114e5761114e612d28565b6000918252602090912001546001600160a01b03858116911614156111795761117682612ccd565b91505b61118281612ccd565b9050611131565b5092915050565b6005546001600160a01b031633146111ba5760405162461bcd60e51b81526004016109d190612a90565b6111c46000611fb3565b565b6005546001600160a01b031633146111f05760405162461bcd60e51b81526004016109d190612a90565b6007805460ff1916911515919091179055565b60606000611210836110c2565b905060008167ffffffffffffffff81111561122d5761122d612d3e565b604051908082528060200260200182016040528015611256578160200160208202803683370190505b50905060005b8281101561129d5761126e8582610b3d565b82828151811061128057611280612d28565b60209081029190910101528061129581612ccd565b91505061125c565b509392505050565b6005546001600160a01b031633146112cf5760405162461bcd60e51b81526004016109d190612a90565b600a55565b6060600180546108e690612c92565b6005546001600160a01b0316331461130d5760405162461bcd60e51b81526004016109d190612a90565b60095481111561137d5760405162461bcd60e51b815260206004820152603560248201527f596f7520617265206e6f742061626c6520746f2072657365727665206d6f7265604482015274103a3430b7103a34329039b2ba1030b6b7bab73a1760591b60648201526084016109d1565b806009600082825461138f9190612c4f565b909155505060025460005b82811015610b07576113b033610f788385612c04565b806113ba81612ccd565b91505061139a565b6001600160a01b03821633141561141b5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016109d1565b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6114913383611d81565b6114ad5760405162461bcd60e51b81526004016109d190612b5e565b6114b984848484612005565b50505050565b60006114ca60025490565b60075490915060ff166114ef5760405162461bcd60e51b81526004016109d190612b1d565b610abe6114fc8383612c04565b111561151a5760405162461bcd60e51b81526004016109d190612ac5565b60008211801561152a5750601d82105b61159c5760405162461bcd60e51b815260206004820152603e60248201527f596f75206172652061626c6520746f206d696e74206265747765656e20312d3260448201527f382041464420746f6b656e73206174207468652073616d652074696d652e000060648201526084016109d1565b610abe6115a98383612c04565b11156115c75760405162461bcd60e51b81526004016109d190612ac5565b81600a546115d59190612c30565b34146115f35760405162461bcd60e51b81526004016109d190612a49565b60005b82811015610b075761160c33610f788385612c04565b8061161681612ccd565b9150506115f6565b606061162982611cc9565b61166d5760405162461bcd60e51b81526020600482015260156024820152742a37b5b2b7103237b2b9903737ba1032bc34b9ba1760591b60448201526064016109d1565b600c61167883612038565b604051602001611689929190612871565b6040516020818303038152906040529050919050565b6005546001600160a01b031633146116c95760405162461bcd60e51b81526004016109d190612a90565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b600d5460405163c455279160e01b81526001600160a01b03848116600483015260009281169190841690829063c45527919060240160206040518083038186803b15801561173857600080fd5b505afa15801561174c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177091906127aa565b6001600160a01b0316148061179d57506001600160a01b03831660009081526014602052604090205460ff165b156117ac5760019150506108d1565b6001600160a01b0380851660009081526004602090815260408083209387168352929052205460ff165b949350505050565b6005546001600160a01b031633146118085760405162461bcd60e51b81526004016109d190612a90565b6001600160a01b03811661186d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109d1565b61187681611fb3565b50565b6005546001600160a01b031633146118a35760405162461bcd60e51b81526004016109d190612a90565b6001600160a01b03166000908152601460205260409020805460ff19811660ff90911615179055565b60006118d760025490565b3360009081526012602052604090205460075491925090610100900460ff1661194c5760405162461bcd60e51b815260206004820152602160248201527f546865204146442070726573616c652069736e277420616374697665207965746044820152601760f91b60648201526084016109d1565b600081116119b35760405162461bcd60e51b815260206004820152602e60248201527f546865726520617265206e6f20746f6b656e7320726573657276656420666f7260448201526d103cb7bab91030b2323932b9b99760911b60648201526084016109d1565b80831115611a175760405162461bcd60e51b815260206004820152603b6024820152600080516020612d8083398151915260448201527f616e207768617420697320726573657276656420746f20796f752e000000000060648201526084016109d1565b60ff611a238484612c04565b1115611a955760405162461bcd60e51b81526020600482015260476024820152600080516020612d8083398151915260448201527f616e20746865206d617820737570706c79206f6620465245452041696d6c657360648201526639902334b9b41760c91b608482015260a4016109d1565b82600b54611aa39190612c30565b3414611ac15760405162461bcd60e51b81526004016109d190612a49565b611acb8382612c4f565b336000908152601260205260408120919091555b838110156114b957611af533610f788386612c04565b80611aff81612ccd565b915050611adf565b6006805461104190612c92565b6005546001600160a01b03163314611b3e5760405162461bcd60e51b81526004016109d190612a90565b6000611b4b606483612c1c565b600e549091506001600160a01b03166108fc611b68836021612c30565b6040518115909202916000818181858888f19350505050611b8857600080fd5b600f546001600160a01b03166108fc611ba2836019612c30565b6040518115909202916000818181858888f19350505050611bc257600080fd5b6010546001600160a01b03166108fc611bdc836005612c30565b6040518115909202916000818181858888f19350505050611bfc57600080fd5b6011546001600160a01b03166108fc611c16836026612c30565b6040518115909202916000818181858888f19350505050610cf957600080fd5b6005546001600160a01b03163314611c605760405162461bcd60e51b81526004016109d190612a90565b8051610cf990600690602084019061239e565b3b151590565b60006001600160e01b031982166380ac58cd60e01b1480611caa57506001600160e01b03198216635b5e139f60e01b145b806108d157506301ffc9a760e01b6001600160e01b03198316146108d1565b600254600090821080156108d1575060006001600160a01b031660028381548110611cf657611cf6612d28565b6000918252602090912001546001600160a01b0316141592915050565b600081815260036020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611d4882610cfd565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611d8c82611cc9565b611ded5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016109d1565b6000611df883610cfd565b9050806001600160a01b0316846001600160a01b03161480611e335750836001600160a01b0316611e2884610969565b6001600160a01b0316145b806117d657506117d681856116eb565b826001600160a01b0316611e5682610cfd565b6001600160a01b031614611ebe5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016109d1565b6001600160a01b038216611f205760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016109d1565b611f2b600082611d13565b8160028281548110611f3f57611f3f612d28565b6000918252602082200180546001600160a01b0319166001600160a01b03938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b610cf9828260405180602001604052806000815250612136565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b612010848484611e43565b61201c84848484612169565b6114b95760405162461bcd60e51b81526004016109d1906129f7565b60608161205c5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612086578061207081612ccd565b915061207f9050600a83612c1c565b9150612060565b60008167ffffffffffffffff8111156120a1576120a1612d3e565b6040519080825280601f01601f1916602001820160405280156120cb576020820181803683370190505b5090505b84156117d6576120e0600183612c4f565b91506120ed600a86612ce8565b6120f8906030612c04565b60f81b81838151811061210d5761210d612d28565b60200101906001600160f81b031916908160001a90535061212f600a86612c1c565b94506120cf565b6121408383612276565b61214d6000848484612169565b610b075760405162461bcd60e51b81526004016109d1906129f7565b60006001600160a01b0384163b1561226b57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906121ad903390899088908890600401612918565b602060405180830381600087803b1580156121c757600080fd5b505af19250505080156121f7575060408051601f3d908101601f191682019092526121f49181019061278d565b60015b612251573d808015612225576040519150601f19603f3d011682016040523d82523d6000602084013e61222a565b606091505b5080516122495760405162461bcd60e51b81526004016109d1906129f7565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506117d6565b506001949350505050565b6001600160a01b0382166122cc5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016109d1565b6122d581611cc9565b156123225760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016109d1565b6002805460018101825560009182527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0385169081179091556040518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546123aa90612c92565b90600052602060002090601f0160209004810192826123cc5760008555612412565b82601f106123e557805160ff1916838001178555612412565b82800160010185558215612412579182015b828111156124125782518255916020019190600101906123f7565b50610cb89291505b80821115610cb8576000815560010161241a565b600067ffffffffffffffff83111561244857612448612d3e565b61245b601f8401601f1916602001612baf565b905082815283838301111561246f57600080fd5b828260208301376000602084830101529392505050565b600082601f83011261249757600080fd5b813560206124ac6124a783612be0565b612baf565b80838252828201915082860187848660051b89010111156124cc57600080fd5b60005b858110156124eb578135845292840192908401906001016124cf565b5090979650505050505050565b8035801515811461250857600080fd5b919050565b60006020828403121561251f57600080fd5b813561252a81612d54565b9392505050565b6000806040838503121561254457600080fd5b823561254f81612d54565b9150602083013561255f81612d54565b809150509250929050565b60008060006060848603121561257f57600080fd5b833561258a81612d54565b9250602084013561259a81612d54565b929592945050506040919091013590565b600080600080608085870312156125c157600080fd5b84356125cc81612d54565b935060208501356125dc81612d54565b925060408501359150606085013567ffffffffffffffff8111156125ff57600080fd5b8501601f8101871361261057600080fd5b61261f8782356020840161242e565b91505092959194509250565b6000806040838503121561263e57600080fd5b823561264981612d54565b9150612657602084016124f8565b90509250929050565b6000806040838503121561267357600080fd5b823561267e81612d54565b946020939093013593505050565b6000806040838503121561269f57600080fd5b823567ffffffffffffffff808211156126b757600080fd5b818501915085601f8301126126cb57600080fd5b813560206126db6124a783612be0565b8083825282820191508286018a848660051b89010111156126fb57600080fd5b600096505b8487101561272757803561271381612d54565b835260019690960195918301918301612700565b509650508601359250508082111561273e57600080fd5b5061274b85828601612486565b9150509250929050565b60006020828403121561276757600080fd5b61252a826124f8565b60006020828403121561278257600080fd5b813561252a81612d69565b60006020828403121561279f57600080fd5b815161252a81612d69565b6000602082840312156127bc57600080fd5b815161252a81612d54565b6000602082840312156127d957600080fd5b813567ffffffffffffffff8111156127f057600080fd5b8201601f8101841361280157600080fd5b6117d68482356020840161242e565b60006020828403121561282257600080fd5b5035919050565b60008151808452612841816020860160208601612c66565b601f01601f19169290920160200192915050565b60008151612867818560208601612c66565b9290920192915050565b600080845481600182811c91508083168061288d57607f831692505b60208084108214156128ad57634e487b7160e01b86526022600452602486fd5b8180156128c157600181146128d2576128ff565b60ff198616895284890196506128ff565b60008b81526020902060005b868110156128f75781548b8201529085019083016128de565b505084890196505b50505050505061290f8185612855565b95945050505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061294b90830184612829565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561298d57835183529284019291840191600101612971565b50909695505050505050565b60208152600061252a6020830184612829565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526027908201527f4f7070732120596f752073656e74207468652077726f6e6720616d6f756e742060408201526637b31022aa241760c91b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252604490820152600080516020612d8083398151915260408201527f616e206d617820737570706c79206f6620746f74616c2041696d6c657373204660608201526334b9b41760e11b608082015260a00190565b60208082526021908201527f54686520414644207075626c69632073616c652069736e2774206163746976656040820152601760f91b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff81118282101715612bd857612bd8612d3e565b604052919050565b600067ffffffffffffffff821115612bfa57612bfa612d3e565b5060051b60200190565b60008219821115612c1757612c17612cfc565b500190565b600082612c2b57612c2b612d12565b500490565b6000816000190483118215151615612c4a57612c4a612cfc565b500290565b600082821015612c6157612c61612cfc565b500390565b60005b83811015612c81578181015183820152602001612c69565b838111156114b95750506000910152565b600181811c90821680612ca657607f821691505b60208210811415612cc757634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612ce157612ce1612cfc565b5060010190565b600082612cf757612cf7612d12565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461187657600080fd5b6001600160e01b03198116811461187657600080fdfe596f7520617265206e6f742061626c6520746f206d696e74206d6f7265207468a2646970667358221220cf242acddbedce04a5d415457ec70deb59eb05b9f56fa56e0ff1bb2caf11390564736f6c634300080700334552433732313a207472616e7366657220746f206e6f6e2045524337323152650000000000000000000000000000000000000000000000000000000000000040000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1000000000000000000000000000000000000000000000000000000000000001c687474703a2f2f6e66742e6b656e6c657962726f776e652e636f6d2f00000000
Deployed Bytecode
0x6080604052600436106102ae5760003560e01c80638462151c11610175578063cd7c0326116100dc578063f73c814b11610095578063fc2756981161006f578063fc27569814610843578063fd2b049214610863578063fe60d12c14610876578063ffe630b51461088c57600080fd5b8063f73c814b146107fb578063f759867a1461081b578063fa5cb60c1461082e57600080fd5b8063cd7c03261461073b578063d26ea6c01461075b578063e985e9c51461077b578063eb0353901461079b578063f2fde38b146107bb578063f478da7b146107db57600080fd5b80639dc38c7d1161012e5780639dc38c7d14610682578063a035b1fe146106b2578063a22cb465146106c8578063b88d4fde146106e8578063c634d03214610708578063c87b56dd1461071b57600080fd5b80638462151c146105cc5780638da5cb5b146105f957806391b7f5ed1461061757806394bba2451461063757806395d89b411461064d5780639a5d140b1461066257600080fd5b806350da01cc116102195780636ac8bf4d116101d25780636ac8bf4d1461052f5780636b2fd865146105425780636c0360eb1461056257806370a0823114610577578063715018a614610597578063841718a6146105ac57600080fd5b806350da01cc1461047057806353135ca01461048657806355f804b3146104a55780635bab26e2146104c55780636352211e146104f557806368428a1b1461051557600080fd5b806323b872dd1161026b57806323b872dd146103a35780632f745c59146103c357806339c36fa0146103e35780633f8121a21461041057806342842e0e146104305780634f6ccce71461045057600080fd5b806301ffc9a7146102b357806306fdde03146102e8578063081812fc1461030a578063095ea7b31461034257806318160ddd146103645780631ed7dd0714610383575b600080fd5b3480156102bf57600080fd5b506102d36102ce366004612770565b6108ac565b60405190151581526020015b60405180910390f35b3480156102f457600080fd5b506102fd6108d7565b6040516102df9190612999565b34801561031657600080fd5b5061032a610325366004612810565b610969565b6040516001600160a01b0390911681526020016102df565b34801561034e57600080fd5b5061036261035d366004612660565b6109f6565b005b34801561037057600080fd5b506002545b6040519081526020016102df565b34801561038f57600080fd5b50600f5461032a906001600160a01b031681565b3480156103af57600080fd5b506103626103be36600461256a565b610b0c565b3480156103cf57600080fd5b506103756103de366004612660565b610b3d565b3480156103ef57600080fd5b506103756103fe36600461250d565b60126020526000908152604090205481565b34801561041c57600080fd5b5061036261042b366004612755565b610bf0565b34801561043c57600080fd5b5061036261044b36600461256a565b610c34565b34801561045c57600080fd5b5061037561046b366004612810565b610c4f565b34801561047c57600080fd5b50610375600b5481565b34801561049257600080fd5b506007546102d390610100900460ff1681565b3480156104b157600080fd5b506103626104c03660046127c7565b610cbc565b3480156104d157600080fd5b506102d36104e036600461250d565b60146020526000908152604090205460ff1681565b34801561050157600080fd5b5061032a610510366004612810565b610cfd565b34801561052157600080fd5b506007546102d39060ff1681565b61036261053d366004612810565b610d89565b34801561054e57600080fd5b5061036261055d36600461268c565b610f8f565b34801561056e57600080fd5b506102fd611034565b34801561058357600080fd5b5061037561059236600461250d565b6110c2565b3480156105a357600080fd5b50610362611190565b3480156105b857600080fd5b506103626105c7366004612755565b6111c6565b3480156105d857600080fd5b506105ec6105e736600461250d565b611203565b6040516102df9190612955565b34801561060557600080fd5b506005546001600160a01b031661032a565b34801561062357600080fd5b50610362610632366004612810565b6112a5565b34801561064357600080fd5b5061037560095481565b34801561065957600080fd5b506102fd6112d4565b34801561066e57600080fd5b5061036261067d366004612810565b6112e3565b34801561068e57600080fd5b506102d361069d36600461250d565b60156020526000908152604090205460ff1681565b3480156106be57600080fd5b50610375600a5481565b3480156106d457600080fd5b506103626106e336600461262b565b6113c2565b3480156106f457600080fd5b506103626107033660046125ab565b611487565b610362610716366004612810565b6114bf565b34801561072757600080fd5b506102fd610736366004612810565b61161e565b34801561074757600080fd5b50600d5461032a906001600160a01b031681565b34801561076757600080fd5b5061036261077636600461250d565b61169f565b34801561078757600080fd5b506102d3610796366004612531565b6116eb565b3480156107a757600080fd5b5060115461032a906001600160a01b031681565b3480156107c757600080fd5b506103626107d636600461250d565b6117de565b3480156107e757600080fd5b5060105461032a906001600160a01b031681565b34801561080757600080fd5b5061036261081636600461250d565b611879565b610362610829366004612810565b6118cc565b34801561083a57600080fd5b506102fd611b07565b34801561084f57600080fd5b50600e5461032a906001600160a01b031681565b610362610871366004612810565b611b14565b34801561088257600080fd5b5061037560085481565b34801561089857600080fd5b506103626108a73660046127c7565b611c36565b60006001600160e01b0319821663780e9d6360e01b14806108d157506108d182611c79565b92915050565b6060600080546108e690612c92565b80601f016020809104026020016040519081016040528092919081815260200182805461091290612c92565b801561095f5780601f106109345761010080835404028352916020019161095f565b820191906000526020600020905b81548152906001019060200180831161094257829003601f168201915b5050505050905090565b600061097482611cc9565b6109da5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600360205260409020546001600160a01b031690565b6000610a0182610cfd565b9050806001600160a01b0316836001600160a01b03161415610a6f5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016109d1565b336001600160a01b0382161480610a8b5750610a8b81336116eb565b610afd5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016109d1565b610b078383611d13565b505050565b610b163382611d81565b610b325760405162461bcd60e51b81526004016109d190612b5e565b610b07838383611e43565b6000610b48836110c2565b8210610b665760405162461bcd60e51b81526004016109d1906129ac565b6000805b600254811015610bd75760028181548110610b8757610b87612d28565b6000918252602090912001546001600160a01b0386811691161415610bc55783821415610bb75791506108d19050565b81610bc181612ccd565b9250505b80610bcf81612ccd565b915050610b6a565b5060405162461bcd60e51b81526004016109d1906129ac565b6005546001600160a01b03163314610c1a5760405162461bcd60e51b81526004016109d190612a90565b600780549115156101000261ff0019909216919091179055565b610b0783838360405180602001604052806000815250611487565b6002546000908210610cb85760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016109d1565b5090565b6005546001600160a01b03163314610ce65760405162461bcd60e51b81526004016109d190612a90565b8051610cf990600c90602084019061239e565b5050565b60008060028381548110610d1357610d13612d28565b6000918252602090912001546001600160a01b03169050806108d15760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016109d1565b6000610d9460025490565b60075490915060ff16610db95760405162461bcd60e51b81526004016109d190612b1d565b3360009081526013602052604090205415610e225760405162461bcd60e51b815260206004820152602360248201527f596f7572204672656520746f6b656e20697320616c726561647920636c61696d60448201526232b21760e91b60648201526084016109d1565b600082118015610e325750600282105b610e935760405162461bcd60e51b815260206004820152602c60248201527f596f75206172652061626c6520746f206d696e74206f6e65202831292046726560448201526b329020a322103a37b5b2b71760a11b60648201526084016109d1565b60ff610e9f8383612c04565b1115610f0d5760405162461bcd60e51b81526020600482015260436024820152600080516020612d8083398151915260448201527f616e206d617820737570706c79206f6620465245452041696d6c65737320466960648201526239b41760e91b608482015260a4016109d1565b81600b54610f1b9190612c30565b3414610f395760405162461bcd60e51b81526004016109d190612a49565b60005b82811015610b0757336000908152601360205260408120805460019290610f64908490612c04565b90915550610f7d905033610f788385612c04565b611f99565b80610f8781612ccd565b915050610f3c565b6005546001600160a01b03163314610fb95760405162461bcd60e51b81526004016109d190612a90565b60005b8251811015610b0757818181518110610fd757610fd7612d28565b602002602001015160126000858481518110610ff557610ff5612d28565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550808061102c90612ccd565b915050610fbc565b600c805461104190612c92565b80601f016020809104026020016040519081016040528092919081815260200182805461106d90612c92565b80156110ba5780601f1061108f576101008083540402835291602001916110ba565b820191906000526020600020905b81548152906001019060200180831161109d57829003601f168201915b505050505081565b60006001600160a01b03821661112d5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016109d1565b6000805b600254811015611189576002818154811061114e5761114e612d28565b6000918252602090912001546001600160a01b03858116911614156111795761117682612ccd565b91505b61118281612ccd565b9050611131565b5092915050565b6005546001600160a01b031633146111ba5760405162461bcd60e51b81526004016109d190612a90565b6111c46000611fb3565b565b6005546001600160a01b031633146111f05760405162461bcd60e51b81526004016109d190612a90565b6007805460ff1916911515919091179055565b60606000611210836110c2565b905060008167ffffffffffffffff81111561122d5761122d612d3e565b604051908082528060200260200182016040528015611256578160200160208202803683370190505b50905060005b8281101561129d5761126e8582610b3d565b82828151811061128057611280612d28565b60209081029190910101528061129581612ccd565b91505061125c565b509392505050565b6005546001600160a01b031633146112cf5760405162461bcd60e51b81526004016109d190612a90565b600a55565b6060600180546108e690612c92565b6005546001600160a01b0316331461130d5760405162461bcd60e51b81526004016109d190612a90565b60095481111561137d5760405162461bcd60e51b815260206004820152603560248201527f596f7520617265206e6f742061626c6520746f2072657365727665206d6f7265604482015274103a3430b7103a34329039b2ba1030b6b7bab73a1760591b60648201526084016109d1565b806009600082825461138f9190612c4f565b909155505060025460005b82811015610b07576113b033610f788385612c04565b806113ba81612ccd565b91505061139a565b6001600160a01b03821633141561141b5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016109d1565b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6114913383611d81565b6114ad5760405162461bcd60e51b81526004016109d190612b5e565b6114b984848484612005565b50505050565b60006114ca60025490565b60075490915060ff166114ef5760405162461bcd60e51b81526004016109d190612b1d565b610abe6114fc8383612c04565b111561151a5760405162461bcd60e51b81526004016109d190612ac5565b60008211801561152a5750601d82105b61159c5760405162461bcd60e51b815260206004820152603e60248201527f596f75206172652061626c6520746f206d696e74206265747765656e20312d3260448201527f382041464420746f6b656e73206174207468652073616d652074696d652e000060648201526084016109d1565b610abe6115a98383612c04565b11156115c75760405162461bcd60e51b81526004016109d190612ac5565b81600a546115d59190612c30565b34146115f35760405162461bcd60e51b81526004016109d190612a49565b60005b82811015610b075761160c33610f788385612c04565b8061161681612ccd565b9150506115f6565b606061162982611cc9565b61166d5760405162461bcd60e51b81526020600482015260156024820152742a37b5b2b7103237b2b9903737ba1032bc34b9ba1760591b60448201526064016109d1565b600c61167883612038565b604051602001611689929190612871565b6040516020818303038152906040529050919050565b6005546001600160a01b031633146116c95760405162461bcd60e51b81526004016109d190612a90565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b600d5460405163c455279160e01b81526001600160a01b03848116600483015260009281169190841690829063c45527919060240160206040518083038186803b15801561173857600080fd5b505afa15801561174c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177091906127aa565b6001600160a01b0316148061179d57506001600160a01b03831660009081526014602052604090205460ff165b156117ac5760019150506108d1565b6001600160a01b0380851660009081526004602090815260408083209387168352929052205460ff165b949350505050565b6005546001600160a01b031633146118085760405162461bcd60e51b81526004016109d190612a90565b6001600160a01b03811661186d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109d1565b61187681611fb3565b50565b6005546001600160a01b031633146118a35760405162461bcd60e51b81526004016109d190612a90565b6001600160a01b03166000908152601460205260409020805460ff19811660ff90911615179055565b60006118d760025490565b3360009081526012602052604090205460075491925090610100900460ff1661194c5760405162461bcd60e51b815260206004820152602160248201527f546865204146442070726573616c652069736e277420616374697665207965746044820152601760f91b60648201526084016109d1565b600081116119b35760405162461bcd60e51b815260206004820152602e60248201527f546865726520617265206e6f20746f6b656e7320726573657276656420666f7260448201526d103cb7bab91030b2323932b9b99760911b60648201526084016109d1565b80831115611a175760405162461bcd60e51b815260206004820152603b6024820152600080516020612d8083398151915260448201527f616e207768617420697320726573657276656420746f20796f752e000000000060648201526084016109d1565b60ff611a238484612c04565b1115611a955760405162461bcd60e51b81526020600482015260476024820152600080516020612d8083398151915260448201527f616e20746865206d617820737570706c79206f6620465245452041696d6c657360648201526639902334b9b41760c91b608482015260a4016109d1565b82600b54611aa39190612c30565b3414611ac15760405162461bcd60e51b81526004016109d190612a49565b611acb8382612c4f565b336000908152601260205260408120919091555b838110156114b957611af533610f788386612c04565b80611aff81612ccd565b915050611adf565b6006805461104190612c92565b6005546001600160a01b03163314611b3e5760405162461bcd60e51b81526004016109d190612a90565b6000611b4b606483612c1c565b600e549091506001600160a01b03166108fc611b68836021612c30565b6040518115909202916000818181858888f19350505050611b8857600080fd5b600f546001600160a01b03166108fc611ba2836019612c30565b6040518115909202916000818181858888f19350505050611bc257600080fd5b6010546001600160a01b03166108fc611bdc836005612c30565b6040518115909202916000818181858888f19350505050611bfc57600080fd5b6011546001600160a01b03166108fc611c16836026612c30565b6040518115909202916000818181858888f19350505050610cf957600080fd5b6005546001600160a01b03163314611c605760405162461bcd60e51b81526004016109d190612a90565b8051610cf990600690602084019061239e565b3b151590565b60006001600160e01b031982166380ac58cd60e01b1480611caa57506001600160e01b03198216635b5e139f60e01b145b806108d157506301ffc9a760e01b6001600160e01b03198316146108d1565b600254600090821080156108d1575060006001600160a01b031660028381548110611cf657611cf6612d28565b6000918252602090912001546001600160a01b0316141592915050565b600081815260036020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611d4882610cfd565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611d8c82611cc9565b611ded5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016109d1565b6000611df883610cfd565b9050806001600160a01b0316846001600160a01b03161480611e335750836001600160a01b0316611e2884610969565b6001600160a01b0316145b806117d657506117d681856116eb565b826001600160a01b0316611e5682610cfd565b6001600160a01b031614611ebe5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016109d1565b6001600160a01b038216611f205760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016109d1565b611f2b600082611d13565b8160028281548110611f3f57611f3f612d28565b6000918252602082200180546001600160a01b0319166001600160a01b03938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b610cf9828260405180602001604052806000815250612136565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b612010848484611e43565b61201c84848484612169565b6114b95760405162461bcd60e51b81526004016109d1906129f7565b60608161205c5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612086578061207081612ccd565b915061207f9050600a83612c1c565b9150612060565b60008167ffffffffffffffff8111156120a1576120a1612d3e565b6040519080825280601f01601f1916602001820160405280156120cb576020820181803683370190505b5090505b84156117d6576120e0600183612c4f565b91506120ed600a86612ce8565b6120f8906030612c04565b60f81b81838151811061210d5761210d612d28565b60200101906001600160f81b031916908160001a90535061212f600a86612c1c565b94506120cf565b6121408383612276565b61214d6000848484612169565b610b075760405162461bcd60e51b81526004016109d1906129f7565b60006001600160a01b0384163b1561226b57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906121ad903390899088908890600401612918565b602060405180830381600087803b1580156121c757600080fd5b505af19250505080156121f7575060408051601f3d908101601f191682019092526121f49181019061278d565b60015b612251573d808015612225576040519150601f19603f3d011682016040523d82523d6000602084013e61222a565b606091505b5080516122495760405162461bcd60e51b81526004016109d1906129f7565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506117d6565b506001949350505050565b6001600160a01b0382166122cc5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016109d1565b6122d581611cc9565b156123225760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016109d1565b6002805460018101825560009182527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0385169081179091556040518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546123aa90612c92565b90600052602060002090601f0160209004810192826123cc5760008555612412565b82601f106123e557805160ff1916838001178555612412565b82800160010185558215612412579182015b828111156124125782518255916020019190600101906123f7565b50610cb89291505b80821115610cb8576000815560010161241a565b600067ffffffffffffffff83111561244857612448612d3e565b61245b601f8401601f1916602001612baf565b905082815283838301111561246f57600080fd5b828260208301376000602084830101529392505050565b600082601f83011261249757600080fd5b813560206124ac6124a783612be0565b612baf565b80838252828201915082860187848660051b89010111156124cc57600080fd5b60005b858110156124eb578135845292840192908401906001016124cf565b5090979650505050505050565b8035801515811461250857600080fd5b919050565b60006020828403121561251f57600080fd5b813561252a81612d54565b9392505050565b6000806040838503121561254457600080fd5b823561254f81612d54565b9150602083013561255f81612d54565b809150509250929050565b60008060006060848603121561257f57600080fd5b833561258a81612d54565b9250602084013561259a81612d54565b929592945050506040919091013590565b600080600080608085870312156125c157600080fd5b84356125cc81612d54565b935060208501356125dc81612d54565b925060408501359150606085013567ffffffffffffffff8111156125ff57600080fd5b8501601f8101871361261057600080fd5b61261f8782356020840161242e565b91505092959194509250565b6000806040838503121561263e57600080fd5b823561264981612d54565b9150612657602084016124f8565b90509250929050565b6000806040838503121561267357600080fd5b823561267e81612d54565b946020939093013593505050565b6000806040838503121561269f57600080fd5b823567ffffffffffffffff808211156126b757600080fd5b818501915085601f8301126126cb57600080fd5b813560206126db6124a783612be0565b8083825282820191508286018a848660051b89010111156126fb57600080fd5b600096505b8487101561272757803561271381612d54565b835260019690960195918301918301612700565b509650508601359250508082111561273e57600080fd5b5061274b85828601612486565b9150509250929050565b60006020828403121561276757600080fd5b61252a826124f8565b60006020828403121561278257600080fd5b813561252a81612d69565b60006020828403121561279f57600080fd5b815161252a81612d69565b6000602082840312156127bc57600080fd5b815161252a81612d54565b6000602082840312156127d957600080fd5b813567ffffffffffffffff8111156127f057600080fd5b8201601f8101841361280157600080fd5b6117d68482356020840161242e565b60006020828403121561282257600080fd5b5035919050565b60008151808452612841816020860160208601612c66565b601f01601f19169290920160200192915050565b60008151612867818560208601612c66565b9290920192915050565b600080845481600182811c91508083168061288d57607f831692505b60208084108214156128ad57634e487b7160e01b86526022600452602486fd5b8180156128c157600181146128d2576128ff565b60ff198616895284890196506128ff565b60008b81526020902060005b868110156128f75781548b8201529085019083016128de565b505084890196505b50505050505061290f8185612855565b95945050505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061294b90830184612829565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561298d57835183529284019291840191600101612971565b50909695505050505050565b60208152600061252a6020830184612829565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526027908201527f4f7070732120596f752073656e74207468652077726f6e6720616d6f756e742060408201526637b31022aa241760c91b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252604490820152600080516020612d8083398151915260408201527f616e206d617820737570706c79206f6620746f74616c2041696d6c657373204660608201526334b9b41760e11b608082015260a00190565b60208082526021908201527f54686520414644207075626c69632073616c652069736e2774206163746976656040820152601760f91b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff81118282101715612bd857612bd8612d3e565b604052919050565b600067ffffffffffffffff821115612bfa57612bfa612d3e565b5060051b60200190565b60008219821115612c1757612c17612cfc565b500190565b600082612c2b57612c2b612d12565b500490565b6000816000190483118215151615612c4a57612c4a612cfc565b500290565b600082821015612c6157612c61612cfc565b500390565b60005b83811015612c81578181015183820152602001612c69565b838111156114b95750506000910152565b600181811c90821680612ca657607f821691505b60208210811415612cc757634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612ce157612ce1612cfc565b5060010190565b600082612cf757612cf7612d12565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461187657600080fd5b6001600160e01b03198116811461187657600080fdfe596f7520617265206e6f742061626c6520746f206d696e74206d6f7265207468a2646970667358221220cf242acddbedce04a5d415457ec70deb59eb05b9f56fa56e0ff1bb2caf11390564736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1000000000000000000000000000000000000000000000000000000000000001c687474703a2f2f6e66742e6b656e6c657962726f776e652e636f6d2f00000000
-----Decoded View---------------
Arg [0] : _baseURI (string): http://nft.kenleybrowne.com/
Arg [1] : _proxyRegistryAddress (address): 0xa5409ec958C83C3f309868babACA7c86DCB077c1
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1
Arg [2] : 000000000000000000000000000000000000000000000000000000000000001c
Arg [3] : 687474703a2f2f6e66742e6b656e6c657962726f776e652e636f6d2f00000000
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.