ETH Price: $2,723.28 (+1.19%)

Contract

0x12f9ad05f9604DAADdE1F39c630f84D7Dc23623F
 

Overview

ETH Balance

2.9115 ETH

Eth Value

$7,928.83 (@ $2,723.28/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set Approval For...205967292024-08-24 6:40:11174 days ago1724481611IN
0x12f9ad05...7Dc23623F
0 ETH0.000021610.89115887
Set Approval For...190985572024-01-27 14:37:23384 days ago1706366243IN
0x12f9ad05...7Dc23623F
0 ETH0.0007891317.07163134
Set Approval For...156286462022-09-28 1:46:47871 days ago1664329607IN
0x12f9ad05...7Dc23623F
0 ETH0.0004718810.20574104
Set Approval For...156026602022-09-24 10:36:23874 days ago1664015783IN
0x12f9ad05...7Dc23623F
0 ETH0.00039938.65185874
Set Approval For...155611542022-09-18 14:54:11880 days ago1663512851IN
0x12f9ad05...7Dc23623F
0 ETH0.000408538.85181848
Safe Transfer Fr...154803782022-09-05 22:19:33893 days ago1662416373IN
0x12f9ad05...7Dc23623F
0 ETH0.000568248.21941047
Set Approval For...153907412022-08-22 14:26:19907 days ago1661178379IN
0x12f9ad05...7Dc23623F
0 ETH0.0007683316.64765433
Set Approval For...153512922022-08-16 8:26:54913 days ago1660638414IN
0x12f9ad05...7Dc23623F
0 ETH0.000354657.6842491
Transfer From153400102022-08-14 13:26:55915 days ago1660483615IN
0x12f9ad05...7Dc23623F
0 ETH0.0005402112.14356923
Transfer From153398992022-08-14 13:00:43915 days ago1660482043IN
0x12f9ad05...7Dc23623F
0 ETH0.0011818717.80301236
Set Approval For...153329002022-08-13 10:36:05916 days ago1660386965IN
0x12f9ad05...7Dc23623F
0 ETH0.000398938.64378293
Set Approval For...153135682022-08-10 9:27:25919 days ago1660123645IN
0x12f9ad05...7Dc23623F
0 ETH0.000368077.97506594
Set Approval For...153083382022-08-09 13:47:37920 days ago1660052857IN
0x12f9ad05...7Dc23623F
0 ETH0.0009064419.64001186
Set Approval For...153043982022-08-08 22:55:22921 days ago1659999322IN
0x12f9ad05...7Dc23623F
0 ETH0.0008526818.47516086
Transfer From153032522022-08-08 18:51:27921 days ago1659984687IN
0x12f9ad05...7Dc23623F
0 ETH0.0015355624.92884337
Public Mint152990422022-08-08 2:48:35921 days ago1659926915IN
0x12f9ad05...7Dc23623F
0.06 ETH0.000621218.40137132
Public Mint152942892022-08-07 9:14:42922 days ago1659863682IN
0x12f9ad05...7Dc23623F
0.06 ETH0.000439244.82466149
Public Mint152938082022-08-07 7:27:23922 days ago1659857243IN
0x12f9ad05...7Dc23623F
0.06 ETH0.000433675.86509059
Public Mint152935702022-08-07 6:36:10922 days ago1659854170IN
0x12f9ad05...7Dc23623F
0.06 ETH0.000326784.41953633
Public Mint152934592022-08-07 6:11:51922 days ago1659852711IN
0x12f9ad05...7Dc23623F
0.06 ETH0.0018915420.77662711
Public Mint152908802022-08-06 20:28:25923 days ago1659817705IN
0x12f9ad05...7Dc23623F
0.06 ETH0.000651077.15141174
Public Mint152904522022-08-06 18:55:29923 days ago1659812129IN
0x12f9ad05...7Dc23623F
0.06 ETH0.000542495.95877747
Public Mint152903182022-08-06 18:25:12923 days ago1659810312IN
0x12f9ad05...7Dc23623F
0.06 ETH0.00065927.24064494
Public Mint152902862022-08-06 18:19:24923 days ago1659809964IN
0x12f9ad05...7Dc23623F
0.117 ETH0.0012085510.45171623
Set Approval For...152895852022-08-06 15:43:52923 days ago1659800632IN
0x12f9ad05...7Dc23623F
0 ETH0.0005097211.04415222
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
GOTM

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 500 runs

Other Settings:
default evmVersion
File 1 of 16 : GOTM.sol
// SPDX-License-Identifier: CC-BY-NC-4.0
pragma solidity 0.8.15;

import "./token/ERC721Optimized.sol";

contract GOTM is ERC721Optimized {
    constructor(string memory baseURI_, MintConfig memory privateMintConfig_, MintConfig memory publicMintConfig_, address erc721FactoryAddress_, address proxyRegistryAddress_) ERC721Optimized(
        "GOATs of the Metaverse",
        "GOTM",
        baseURI_,
        privateMintConfig_,
        publicMintConfig_,
        erc721FactoryAddress_,
        proxyRegistryAddress_
    ) {}
}

File 2 of 16 : ERC721Optimized.sol
// SPDX-License-Identifier: CC-BY-NC-4.0
pragma solidity 0.8.15;

import "../access/SharedOwnable.sol";
import "../interfaces/IERC721Optimized.sol";
import "../opensea/IERC721Factory.sol";
import "../opensea/ProxyRegistry.sol";

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/token/ERC721/extensions/IERC721Enumerable.sol";
import "@openzeppelin/contracts/utils/Address.sol";
import "@openzeppelin/contracts/utils/Context.sol";
import "@openzeppelin/contracts/utils/Strings.sol";

contract ERC721Optimized is Context, SharedOwnable, IERC721, IERC721Metadata, IERC721Enumerable, IERC721Optimized {
    using Address for address;
    using Strings for uint256;

    struct AddressData {
        uint128 balance;  
        uint128 privateMintCount;
    }

    struct TokenData {
        address owner;
        uint96 owningStartTimestamp;
    }

    uint constant private MAX_TOTAL_SUPPLY = 10000;
    uint constant private MAX_TEAM_MINTS = 100;

    string private _name;
    string private _symbol;
    string private _baseURI;
    MintConfig private _privateMintConfig;
    mapping(uint64 => uint128) private _privateMintDiscountPerMintAmount;
    MintConfig private _publicMintConfig;
    mapping(uint64 => uint128) private _publicMintDiscountPerMintAmount;
    address private _erc721FactoryAddress;
    address private _proxyRegistryAddress;

    uint256 private _totalSupply;
    mapping(address => uint256) private _privateMintWhitelist;

    uint256 private _teamMintedCount;
    uint256 private _privateMintedCount;
    uint256 private _publicMintedCount;
    uint256 private _airdroppedToOwnersCount;
    uint256 private _raffledToOwnersCount;
    mapping(uint256 => uint256) private _raffleToOwnersHelper;

    mapping(address => AddressData) private _addresses;
    mapping(address => mapping(address => uint256)) private _operatorApprovals;
    mapping(uint256 => TokenData) private _tokens;
    mapping(uint256 => address) private _tokenApprovals;

    mapping(uint256 => bool) private _isTeamMintedToken;

    constructor(string memory name_, string memory symbol_, string memory baseURI_, MintConfig memory privateMintConfig_, MintConfig memory publicMintConfig_, address erc721FactoryAddress_, address proxyRegistryAddress_) {
        require(bytes(name_).length > 0, "ERC721Optimized: name can't be empty");
        require(bytes(symbol_).length > 0, "ERC721Optimized: symbol can't be empty");
        require(bytes(baseURI_).length > 0, "ERC721Optimized: baseURI can't be empty");
        require(privateMintConfig_.maxMintAmountPerAddress <= privateMintConfig_.maxTotalMintAmount, "ERC721Optimized: maximum mint amount per address can't exceed the maximum total mint amount");
        require(privateMintConfig_.pricePerMint > 0, "ERC721Optimized: the mint can't be for free");
        require(privateMintConfig_.discountPerMintAmountKeys.length == privateMintConfig_.discountPerMintAmountValues.length, "ERC721Optimized: array size mismatch");
        require(publicMintConfig_.pricePerMint > 0, "ERC721Optimized: the mint can't be for free");
        require(publicMintConfig_.discountPerMintAmountKeys.length == publicMintConfig_.discountPerMintAmountValues.length, "ERC721Optimized: array size mismatch");
        if (erc721FactoryAddress_ != address(0))
            IERC721Factory(erc721FactoryAddress_).supportsFactoryInterface();
        if (proxyRegistryAddress_ != address(0))
            ProxyRegistry(proxyRegistryAddress_).proxies(_msgSender());

        _name = name_;
        _symbol = symbol_;
        _baseURI = baseURI_;
        _privateMintConfig = privateMintConfig_;
        for (uint256 index = 0; index < privateMintConfig_.discountPerMintAmountKeys.length; index++) {
            require(privateMintConfig_.discountPerMintAmountValues[index] < 100, "ERC721Optimized: discount exceeds 100%");
            _privateMintDiscountPerMintAmount[privateMintConfig_.discountPerMintAmountKeys[index]] = privateMintConfig_.discountPerMintAmountValues[index];
        }
        _publicMintConfig = publicMintConfig_;
        for (uint256 index = 0; index < publicMintConfig_.discountPerMintAmountKeys.length; index++) {
            require(publicMintConfig_.discountPerMintAmountValues[index] < 100, "ERC721Optimized: discount exceeds 100%");
            _publicMintDiscountPerMintAmount[publicMintConfig_.discountPerMintAmountKeys[index]] = publicMintConfig_.discountPerMintAmountValues[index];
        }
        _erc721FactoryAddress = erc721FactoryAddress_;
        _proxyRegistryAddress = proxyRegistryAddress_;
    }

    modifier onlyERC721Factory() {
        require(_erc721FactoryAddress == msg.sender, "ERC721Optimized: caller is not the erc 721 factory");
        _;
    }

    receive() external payable {}
    fallback() external payable {}

    function supportsInterface(bytes4 interfaceId) external pure returns (bool) {
        return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || interfaceId == type(IERC721Enumerable).interfaceId || interfaceId == type(IERC721Optimized).interfaceId || interfaceId == type(IERC165).interfaceId;
    }

    function name() external view returns (string memory) {
        return _name;
    }

    function symbol() external view returns (string memory) {
        return _symbol;
    }

    function baseURI() external view returns (string memory) {
        return _baseURI;
    }

    function privateMintConfig() external view returns (MintConfig memory) {
        return _privateMintConfig;
    }

    function publicMintConfig() external view returns (MintConfig memory) {
        return _publicMintConfig;
    }

    function erc721FactoryAddress() external view returns (address) {
        return _erc721FactoryAddress;
    }

    function proxyRegistryAddress() external view returns (address) {
        return _proxyRegistryAddress;
    }

    function setBaseURI(string calldata baseURI_) external onlySharedOwners {
        require(bytes(baseURI_).length > 0, "ERC721Optimized: baseURI can't be empty");
        _baseURI = baseURI_;
    }

    function setPrivateMintConfig(MintConfig calldata privateMintConfig_) external onlySharedOwners {
        require(privateMintConfig_.maxMintAmountPerAddress <= privateMintConfig_.maxTotalMintAmount, "ERC721Optimized: maximum mint amount per address can't exceed the maximum total mint amount");
        require(privateMintConfig_.pricePerMint > 0, "ERC721Optimized: the mint can't be for free");
        require(privateMintConfig_.discountPerMintAmountKeys.length == privateMintConfig_.discountPerMintAmountValues.length, "ERC721Optimized: array size mismatch");
        for (uint256 index = 0; index < _privateMintConfig.discountPerMintAmountKeys.length; index++)
            delete _privateMintDiscountPerMintAmount[_privateMintConfig.discountPerMintAmountKeys[index]];
        _privateMintConfig = privateMintConfig_;
        for (uint256 index = 0; index < privateMintConfig_.discountPerMintAmountKeys.length; index++) {
            require(privateMintConfig_.discountPerMintAmountValues[index] < 100, "ERC721Optimized: discount exceeds 100%");
            _privateMintDiscountPerMintAmount[privateMintConfig_.discountPerMintAmountKeys[index]] = privateMintConfig_.discountPerMintAmountValues[index];
        }
    }

    function setPublicMintConfig(MintConfig calldata publicMintConfig_) external onlySharedOwners {
        require(publicMintConfig_.pricePerMint > 0, "ERC721Optimized: the mint can't be for free");
        require(publicMintConfig_.discountPerMintAmountKeys.length == publicMintConfig_.discountPerMintAmountValues.length, "ERC721Optimized: array size mismatch");
        for (uint256 index = 0; index < _publicMintConfig.discountPerMintAmountKeys.length; index++)
            delete _publicMintDiscountPerMintAmount[_publicMintConfig.discountPerMintAmountKeys[index]];
        _publicMintConfig = publicMintConfig_;
        for (uint256 index = 0; index < publicMintConfig_.discountPerMintAmountKeys.length; index++) {
            require(publicMintConfig_.discountPerMintAmountValues[index] < 100, "ERC721Optimized: discount exceeds 100%");
            _publicMintDiscountPerMintAmount[publicMintConfig_.discountPerMintAmountKeys[index]] = publicMintConfig_.discountPerMintAmountValues[index];
        }
    }

    function setERC721FactoryAddress(address erc721FactoryAddress_) external onlySharedOwners {
        if (erc721FactoryAddress_ != address(0))
            IERC721Factory(erc721FactoryAddress_).supportsFactoryInterface();
        _erc721FactoryAddress = erc721FactoryAddress_;
    }

    function setProxyRegistryAddress(address proxyRegistryAddress_) external onlySharedOwners {
        if (proxyRegistryAddress_ != address(0))
            ProxyRegistry(proxyRegistryAddress_).proxies(_msgSender());
        _proxyRegistryAddress = proxyRegistryAddress_;
    }

    function totalSupply() external view returns (uint256) {
        return _totalSupply;
    }

    function totalMinted() external view returns (uint256) {
        return _privateMintedCount + _publicMintedCount;
    }

    function isPrivateMintWhitelisted(address account) external view returns (bool) {
        return _privateMintWhitelist[account] > 0;
    }

    function updatePrivateMintWhitelisted(address[] calldata addresses, uint256[] calldata values) external onlySharedOwners {
        require(addresses.length == values.length, "ERC721Optimized: array mismatch");
        for (uint256 index = 0; index < addresses.length; index++)
            _privateMintWhitelist[addresses[index]] = values[index];
    }

    function teamMintedCount() external view returns (uint256) {
        return _teamMintedCount;
    }

    function privateMintedCount() external view returns (uint256) {
        return _privateMintedCount;
    }

    function publicMintedCount() external view returns (uint256) {
        return _publicMintedCount;
    }

    function airdroppedToOwnersCount() external view returns (uint256) {
        return _airdroppedToOwnersCount;
    }

    function raffledToOwnersCount() external view returns (uint256) {
        return _raffledToOwnersCount;
    }

    function isTeamMintedToken(uint256 tokenId) external view returns (bool) {
        require(tokenId < _totalSupply, "ERC721Optimized: Nonexistent tokenId operation");
        return _isTeamMintedToken[tokenId];
    }

    function withdraw(address payable recipient) external onlyOwner {
        (bool success, ) = recipient.call{ value: address(this).balance }("");
        require(success, "ERC721Optimized: Transfer failed.");
    }

    function addressData(address owner) external view returns (AddressData memory) {
        return _addresses[owner];
    }

    function tokenData(uint256 tokenId) external view returns (TokenData memory) {
        return _tokens[tokenId];
    }

    function tokensOfOwner(address owner) external view returns (uint256[] memory tokenIds) {
        tokenIds = new uint256[](_addresses[owner].balance);

        uint256 currentIndex;
        address currentOwner;
        address ownerAtIndex;
        for (uint256 tokenId = 0; tokenId < _totalSupply; tokenId++) {
            ownerAtIndex = _tokens[tokenId].owner;
            if (ownerAtIndex != address(0))
                currentOwner = ownerAtIndex;

            if (currentOwner == owner) {
                tokenIds[currentIndex++] = tokenId;
                if (currentIndex == tokenIds.length)
                    break;
            }
        }

        require(currentIndex == tokenIds.length, "ERC721Optimized: not all tokens found");
    }

    function contractURI() external view returns (string memory) {
        return string(abi.encodePacked(_baseURI, "contract"));
    }

    function tokenURI(uint256 tokenId) external view returns (string memory) {
        return string(abi.encodePacked(_baseURI, tokenId.toString()));
    }

    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId) {
        require(index < _addresses[owner].balance, "ERC721Optimized: Nonexistent index operation");
        
        uint256 currentIndex;
        address currentOwner;
        address ownerAtIndex;
        for (; tokenId < _totalSupply; tokenId++) {
            ownerAtIndex = _tokens[tokenId].owner;
            if (ownerAtIndex != address(0))
                currentOwner = ownerAtIndex;

            if (currentOwner == owner) {
                if (currentIndex == index)
                    return tokenId;

                currentIndex++;
            }
        }

        revert("ERC721Optimized: no token found");
    }

    function tokenByIndex(uint256 index) external view returns (uint256) {
        require(index < _totalSupply, "ERC721Optimized: Nonexistent index operation");
        return index;
    }

    function balanceOf(address owner) external view returns (uint256 balance) {
        balance = _addresses[owner].balance;
    }

    function ownerOf(uint256 tokenId) external view returns (address owner) {
        require(tokenId < _totalSupply, "ERC721Optimized: nonexistent tokenId operation");
        owner = _tokens[tokenId].owner;
    }

    function safeTransferFrom(address from, address to, uint256 tokenId) external {
        address msgSender = _msgSender();
        _transfer(msgSender, from, to, tokenId);
        require(_checkOnERC721Received(msgSender, from, to, tokenId, ""), "ERC721Optimized: transfer to non ERC721Receiver implementer");
    }

    function transferFrom(address from, address to, uint256 tokenId) public {
        _transfer(_msgSender(), from, to, tokenId);
    }

    function approve(address to, uint256 tokenId) external {
        require(tokenId < _totalSupply, "ERC721Optimized: nonexistent tokenId operation");
        address owner = _tokens[tokenId].owner;

        address msgSender = _msgSender();
        require(msgSender == owner || (_operatorApprovals[owner][msgSender] > 0 || (_proxyRegistryAddress != address(0) && address(ProxyRegistry(_proxyRegistryAddress).proxies(owner)) == msgSender)), "ERC721Optimized: approve caller is not owner nor approved for all");
        _tokenApprovals[tokenId] = to;

        emit Approval(owner, to, tokenId);
    }

    function getApproved(uint256 tokenId) external view returns (address operator) {
        require(tokenId < _totalSupply, "ERC721Optimized: nonexistent tokenId operation");
        operator = _tokenApprovals[tokenId];
    }

    function setApprovalForAll(address operator, bool _approved) external {
        address msgSender = _msgSender();
        require(msgSender != operator, "ERC721Optimized: approve to caller");
        _operatorApprovals[msgSender][operator] = _approved ? 1 : 0;

        emit ApprovalForAll(msgSender, operator, _approved);
    }

    function isApprovedForAll(address owner, address operator) external view returns (bool) {
        return _operatorApprovals[owner][operator] > 0 || (_proxyRegistryAddress != address(0) && address(ProxyRegistry(_proxyRegistryAddress).proxies(owner)) == operator);
    }

    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external {
        address msgSender = _msgSender();
        _transfer(msgSender, from, to, tokenId);
        require(_checkOnERC721Received(msgSender, from, to, tokenId, data), "ERC721Optimized: transfer to non ERC721Receiver implementer");
    }

    function transferWithData(address to, uint256 tokenId) external {
        address msgSender = _msgSender();
        uint96 tokenOwningStartTimestamp = _tokens[tokenId].owningStartTimestamp;
        _transfer(msgSender, msgSender, to, tokenId);
        _tokens[tokenId].owningStartTimestamp = tokenOwningStartTimestamp;
    }

    function privateMint(uint64 quantity) external payable {
        require(block.timestamp >= _privateMintConfig.mintStartTimestamp, "ERC721Optimized: private mint has not yet started");
        require(block.timestamp < _privateMintConfig.mintEndTimestamp, "ERC721Optimized: private mint has ended");
        address msgSender = _msgSender();

        require(_privateMintWhitelist[msgSender] > 0, "ERC721Optimized: not whitelisted for the private mint");
        require(_privateMintedCount + _publicMintedCount + quantity <= _privateMintConfig.maxTotalMintAmount, "ERC721Optimized: exceeds total mint maximum");
        require(_addresses[msgSender].privateMintCount + quantity <= _privateMintConfig.maxMintAmountPerAddress, "ERC721Optimized: exceeds mint maximum");
        uint128 discount = _privateMintDiscountPerMintAmount[quantity];
        uint256 discountedPrice = ((quantity * _privateMintConfig.pricePerMint) * (100 - discount)) / 100;
        require(msg.value >= discountedPrice, "ERC721Optimized: missing funds");
        _safeMint(msgSender, msgSender, quantity);
        _addresses[msgSender].privateMintCount += quantity;
        _privateMintedCount += quantity;
    }

    function publicMint(uint64 quantity) external payable {
        require(block.timestamp >= _publicMintConfig.mintStartTimestamp, "ERC721Optimized: public mint has not yet started");
        require(block.timestamp < _publicMintConfig.mintEndTimestamp, "ERC721Optimized: public mint has ended");
        address msgSender = _msgSender();

        require(_privateMintedCount + _publicMintedCount + quantity <= _publicMintConfig.maxTotalMintAmount, "ERC721Optimized: exceeds total mint maximum");
        uint128 discount = _publicMintDiscountPerMintAmount[quantity];
        uint256 discountedPrice = ((quantity * _publicMintConfig.pricePerMint) * (100 - discount)) / 100;
        require(msg.value >= discountedPrice, "ERC721Optimized: missing funds");
        _safeMint(msgSender, msgSender, quantity);
        _publicMintedCount += quantity;
    }

    function publicMint(address to, uint64 quantity) external onlyERC721Factory {
        require(block.timestamp >= _publicMintConfig.mintStartTimestamp, "ERC721Optimized: public mint has not yet started");
        require(block.timestamp < _publicMintConfig.mintEndTimestamp, "ERC721Optimized: public mint has not yet started");
        
        require(_privateMintedCount + _publicMintedCount + quantity <= _publicMintConfig.maxTotalMintAmount, "ERC721Optimized: exceeds total mint maximum");
        _safeMint(_msgSender(), to, quantity);
        _publicMintedCount += quantity;
    }

    function teamMint(address[] calldata addresses, uint128[] calldata quantities) external onlySharedOwners {
        require(quantities.length == addresses.length, "ERC721Optimized: array size mismatch");

        uint256 j;
        uint128 quantity;
        for (uint256 index = 0; index < addresses.length; index++) {
            quantity = quantities[index];
            for (j = 0; j < quantity; j++)
                _isTeamMintedToken[_totalSupply + j] = true;
            _safeMint(_msgSender(), addresses[index], quantity);
            _teamMintedCount += quantity;
        }

        require(_teamMintedCount <= MAX_TEAM_MINTS, "ERC721Optimized: exceeds maximum team mint count");
    }

    function airdropToOwners(uint256 airdropQuantity, uint256 startTokenId) external onlySharedOwners {
        uint256 _existingTotalSupply = _totalSupply;
        require(startTokenId + airdropQuantity <= _existingTotalSupply, "ERC721Optimized: not enough tokens");

        uint256 _airdroppedTokens = 0;
        for (uint256 tokenId = startTokenId; tokenId < _existingTotalSupply && _airdroppedTokens < airdropQuantity; tokenId++) {
            if (!_isTeamMintedToken[tokenId]) {
                _safeMint(_msgSender(), _tokens[tokenId].owner, 1);
                _airdroppedTokens++;
            }
        }

        require(_airdroppedTokens == airdropQuantity, "ERC721Optimized: didn't minted all tokens");
        _airdroppedToOwnersCount += _airdroppedTokens;
    }

    function resetRaffleToOwnersHelper() external onlySharedOwners {
        for (uint256 tokenId = 0; tokenId < _totalSupply; tokenId++)
            if (_raffleToOwnersHelper[tokenId] != 0)
                _raffleToOwnersHelper[tokenId] = 0;
    }

    function raffleToOwners(uint256 minimumOwningDuration, uint256 tokensToRaffle, uint256 maxIterations) external onlySharedOwners {
        address[] memory owners = new address[](tokensToRaffle);
        uint256 ownersFound = 0;
        uint256 tokensIterated = 0;
        uint256 iterations = 0;

        uint256 tokenId;
        TokenData memory token;
        while (ownersFound < tokensToRaffle && _totalSupply - tokensIterated > tokensToRaffle - ownersFound && iterations < maxIterations) {
            tokenId = _getRandomExistingTokenId(iterations++);
            if (_raffleToOwnersHelper[tokenId] == 0) {
                token = _tokens[tokenId];
                if (block.timestamp - token.owningStartTimestamp >= minimumOwningDuration)
                    owners[ownersFound++] = token.owner;
                tokensIterated++;
                _raffleToOwnersHelper[tokenId] = 1;
            }
        }

        require(ownersFound == tokensToRaffle, "ERC721Optimized: didn't found all owners");
        for (uint256 index = 0; index < ownersFound; index++)
            _safeMint(_msgSender(), owners[index], 1);

        _raffledToOwnersCount += tokensToRaffle;
    }

    function _safeMint(address operator, address to, uint128 quantity) internal {
        require(to != address(0), "ERC721Optimized: mint to the zero address");
        require(_totalSupply + quantity <= MAX_TOTAL_SUPPLY, "ERC721Optimized: mint exceeds max total supply");

        uint256 tokenId = _totalSupply;
        for (uint256 index = 0; index < quantity; index++) {
            _tokens[tokenId].owner = to;
            _tokens[tokenId].owningStartTimestamp = uint96(block.timestamp);

            emit Transfer(address(0), to, tokenId);
            require(_checkOnERC721Received(operator, address(0), to, tokenId++, ""), "ERC721Optimized: transfer to non ERC721Receiver implementer");
        }
        require(tokenId == _totalSupply + quantity, "ERC721Optimized: Reentrancy detected");

        _totalSupply = tokenId;
        _addresses[to].balance += quantity;
    }

    function _transfer(address operator, address from, address to, uint256 tokenId) private {
        require(from != address(0), "ERC721Optimized: transfer from the zero address");
        require(to != address(0), "ERC721Optimized: transfer to the zero address");
        require(tokenId < _totalSupply, "ERC721Optimized: nonexistent tokenId operation");
        require(_tokens[tokenId].owner == from, "ERC721Optimized: transfer from incorrect owner");
        require(from == operator || _tokenApprovals[tokenId] == operator || (_operatorApprovals[from][operator] > 0 || (_proxyRegistryAddress != address(0) && address(ProxyRegistry(_proxyRegistryAddress).proxies(from)) == operator)), "ERC721Optimized: transfer caller is not owner nor approved");
        require(from != to, "ERC721Optimized: transfer to the same address");
        require(!_isTeamMintedToken[tokenId] || block.timestamp >= _publicMintConfig.mintStartTimestamp,  "ERC721Optimized: transfer of team minted token prior to public mint");

        _tokenApprovals[tokenId] = address(0);
        emit Approval(from, address(0), tokenId);

        _addresses[from].balance -= 1;
        _addresses[to].balance += 1;
        _tokens[tokenId].owner = to;
        _tokens[tokenId].owningStartTimestamp = uint96(block.timestamp);
        emit Transfer(from, to, tokenId);
    }

    function _checkOnERC721Received(address operator, address from, address to, uint256 tokenId, bytes memory data) private returns (bool) {
        if (to.isContract())
            try IERC721Receiver(to).onERC721Received(operator, from, tokenId, data) returns (bytes4 retval) {
                return retval == IERC721Receiver(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0)
                    revert("ERC721Optimized: transfer to non ERC721Receiver implementer");
                else
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
            }
        else
            return true;
    }
    
    function _getRandomExistingTokenId(uint256 nonce) private view returns (uint256) {
        uint256 seed = uint256(keccak256(abi.encodePacked(nonce + block.timestamp + block.difficulty + ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (block.timestamp)) + block.gaslimit + ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (block.timestamp)) + block.number + nonce)));
        return seed - ((seed / _totalSupply) * _totalSupply);
    }
}

File 3 of 16 : ProxyRegistry.sol
// SPDX-License-Identifier: CC-BY-NC-4.0
pragma solidity >=0.4.13;

import "./OwnableDelegateProxy.sol";

contract ProxyRegistry {
    mapping(address => OwnableDelegateProxy) public proxies;
}

File 4 of 16 : OwnableDelegateProxy.sol
// SPDX-License-Identifier: CC-BY-NC-4.0
pragma solidity >=0.4.13;

contract OwnableDelegateProxy {}

File 5 of 16 : IERC721Factory.sol
// SPDX-License-Identifier: CC-BY-NC-4.0
pragma solidity ^0.8.0;

interface IERC721Factory {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function numOptions() external view returns (uint256);

    function canMint(uint256 _optionId) external view returns (bool);

    function tokenURI(uint256 _optionId) external view returns (string memory);

    function supportsFactoryInterface() external view returns (bool);

    function mint(uint256 _optionId, address _toAddress) external;
}

File 6 of 16 : IERC721Optimized.sol
// SPDX-License-Identifier: CC-BY-NC-4.0
pragma solidity 0.8.15;

interface IERC721Optimized {
    struct MintConfig {
        uint64 maxTotalMintAmount;
        uint64 maxMintAmountPerAddress;
        uint128 pricePerMint;
        uint256 mintStartTimestamp;
        uint256 mintEndTimestamp;
        uint64[] discountPerMintAmountKeys;
        uint128[] discountPerMintAmountValues;
    }

    function publicMintConfig() external view returns (MintConfig memory);

    function totalMinted() external view returns (uint256);

    function publicMint(address to, uint64 amount) external;
}

File 7 of 16 : SharedOwnable.sol
// SPDX-License-Identifier: CC-BY-NC-4.0
pragma solidity 0.8.15;

import "@openzeppelin/contracts/access/Ownable.sol";

abstract contract SharedOwnable is Ownable {
    address private _creator;
    mapping(address => bool) private _sharedOwners;

    event SharedOwnershipAdded(address indexed sharedOwner);
    event SharedOwnershipRemoved(address indexed sharedOwner);

    constructor() Ownable() {
        _creator = msg.sender;
        _setSharedOwner(msg.sender, true);
    }

    modifier onlyCreator() {
        require(_creator == msg.sender, "SharedOwnable: caller is not the creator");
        _;
    }

    modifier onlySharedOwners() {
        require(owner() == msg.sender || _sharedOwners[msg.sender], "SharedOwnable: caller is not a shared owner");
        _;
    }

    function getCreator() external view returns (address) {
        return _creator;
    }

    function isSharedOwner(address account) external view returns (bool) {
        return _sharedOwners[account];
    }

    function setSharedOwner(address account, bool sharedOwner) external onlyCreator {
        _setSharedOwner(account, sharedOwner);
    }

    function _setSharedOwner(address account, bool sharedOwner) private {
        _sharedOwners[account] = sharedOwner;
        if (sharedOwner)
            emit SharedOwnershipAdded(account);
        else
            emit SharedOwnershipRemoved(account);
    }
}

File 8 of 16 : IERC165.sol
// 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);
}

File 9 of 16 : Strings.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
    uint8 private constant _ADDRESS_LENGTH = 20;

    /**
     * @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);
    }

    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}

File 10 of 16 : Context.sol
// 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;
    }
}

File 11 of 16 : Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly
                /// @solidity memory-safe-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 12 of 16 : IERC721Metadata.sol
// 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);
}

File 13 of 16 : IERC721Enumerable.sol
// 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);
}

File 14 of 16 : IERC721Receiver.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (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 `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

File 15 of 16 : IERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (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`.
     *
     * 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;

    /**
     * @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 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 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 the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @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);
}

File 16 of 16 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (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 Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        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);
    }
}

Settings
{
  "remappings": [],
  "optimizer": {
    "enabled": true,
    "runs": 500
  },
  "evmVersion": "london",
  "libraries": {},
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"},{"components":[{"internalType":"uint64","name":"maxTotalMintAmount","type":"uint64"},{"internalType":"uint64","name":"maxMintAmountPerAddress","type":"uint64"},{"internalType":"uint128","name":"pricePerMint","type":"uint128"},{"internalType":"uint256","name":"mintStartTimestamp","type":"uint256"},{"internalType":"uint256","name":"mintEndTimestamp","type":"uint256"},{"internalType":"uint64[]","name":"discountPerMintAmountKeys","type":"uint64[]"},{"internalType":"uint128[]","name":"discountPerMintAmountValues","type":"uint128[]"}],"internalType":"struct IERC721Optimized.MintConfig","name":"privateMintConfig_","type":"tuple"},{"components":[{"internalType":"uint64","name":"maxTotalMintAmount","type":"uint64"},{"internalType":"uint64","name":"maxMintAmountPerAddress","type":"uint64"},{"internalType":"uint128","name":"pricePerMint","type":"uint128"},{"internalType":"uint256","name":"mintStartTimestamp","type":"uint256"},{"internalType":"uint256","name":"mintEndTimestamp","type":"uint256"},{"internalType":"uint64[]","name":"discountPerMintAmountKeys","type":"uint64[]"},{"internalType":"uint128[]","name":"discountPerMintAmountValues","type":"uint128[]"}],"internalType":"struct IERC721Optimized.MintConfig","name":"publicMintConfig_","type":"tuple"},{"internalType":"address","name":"erc721FactoryAddress_","type":"address"},{"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":"sharedOwner","type":"address"}],"name":"SharedOwnershipAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sharedOwner","type":"address"}],"name":"SharedOwnershipRemoved","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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"addressData","outputs":[{"components":[{"internalType":"uint128","name":"balance","type":"uint128"},{"internalType":"uint128","name":"privateMintCount","type":"uint128"}],"internalType":"struct ERC721Optimized.AddressData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"airdropQuantity","type":"uint256"},{"internalType":"uint256","name":"startTokenId","type":"uint256"}],"name":"airdropToOwners","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"airdroppedToOwnersCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"erc721FactoryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"operator","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCreator","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":"address","name":"account","type":"address"}],"name":"isPrivateMintWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isSharedOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"isTeamMintedToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint64","name":"quantity","type":"uint64"}],"name":"privateMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"privateMintConfig","outputs":[{"components":[{"internalType":"uint64","name":"maxTotalMintAmount","type":"uint64"},{"internalType":"uint64","name":"maxMintAmountPerAddress","type":"uint64"},{"internalType":"uint128","name":"pricePerMint","type":"uint128"},{"internalType":"uint256","name":"mintStartTimestamp","type":"uint256"},{"internalType":"uint256","name":"mintEndTimestamp","type":"uint256"},{"internalType":"uint64[]","name":"discountPerMintAmountKeys","type":"uint64[]"},{"internalType":"uint128[]","name":"discountPerMintAmountValues","type":"uint128[]"}],"internalType":"struct IERC721Optimized.MintConfig","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"privateMintedCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxyRegistryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint64","name":"quantity","type":"uint64"}],"name":"publicMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"quantity","type":"uint64"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicMintConfig","outputs":[{"components":[{"internalType":"uint64","name":"maxTotalMintAmount","type":"uint64"},{"internalType":"uint64","name":"maxMintAmountPerAddress","type":"uint64"},{"internalType":"uint128","name":"pricePerMint","type":"uint128"},{"internalType":"uint256","name":"mintStartTimestamp","type":"uint256"},{"internalType":"uint256","name":"mintEndTimestamp","type":"uint256"},{"internalType":"uint64[]","name":"discountPerMintAmountKeys","type":"uint64[]"},{"internalType":"uint128[]","name":"discountPerMintAmountValues","type":"uint128[]"}],"internalType":"struct IERC721Optimized.MintConfig","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicMintedCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"minimumOwningDuration","type":"uint256"},{"internalType":"uint256","name":"tokensToRaffle","type":"uint256"},{"internalType":"uint256","name":"maxIterations","type":"uint256"}],"name":"raffleToOwners","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"raffledToOwnersCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resetRaffleToOwnersHelper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"erc721FactoryAddress_","type":"address"}],"name":"setERC721FactoryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint64","name":"maxTotalMintAmount","type":"uint64"},{"internalType":"uint64","name":"maxMintAmountPerAddress","type":"uint64"},{"internalType":"uint128","name":"pricePerMint","type":"uint128"},{"internalType":"uint256","name":"mintStartTimestamp","type":"uint256"},{"internalType":"uint256","name":"mintEndTimestamp","type":"uint256"},{"internalType":"uint64[]","name":"discountPerMintAmountKeys","type":"uint64[]"},{"internalType":"uint128[]","name":"discountPerMintAmountValues","type":"uint128[]"}],"internalType":"struct IERC721Optimized.MintConfig","name":"privateMintConfig_","type":"tuple"}],"name":"setPrivateMintConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"proxyRegistryAddress_","type":"address"}],"name":"setProxyRegistryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint64","name":"maxTotalMintAmount","type":"uint64"},{"internalType":"uint64","name":"maxMintAmountPerAddress","type":"uint64"},{"internalType":"uint128","name":"pricePerMint","type":"uint128"},{"internalType":"uint256","name":"mintStartTimestamp","type":"uint256"},{"internalType":"uint256","name":"mintEndTimestamp","type":"uint256"},{"internalType":"uint64[]","name":"discountPerMintAmountKeys","type":"uint64[]"},{"internalType":"uint128[]","name":"discountPerMintAmountValues","type":"uint128[]"}],"internalType":"struct IERC721Optimized.MintConfig","name":"publicMintConfig_","type":"tuple"}],"name":"setPublicMintConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"sharedOwner","type":"bool"}],"name":"setSharedOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint128[]","name":"quantities","type":"uint128[]"}],"name":"teamMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"teamMintedCount","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":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenData","outputs":[{"components":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint96","name":"owningStartTimestamp","type":"uint96"}],"internalType":"struct ERC721Optimized.TokenData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalMinted","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":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferWithData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"updatePrivateMintWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b50604051620062bb380380620062bb833981016040819052620000349162000e38565b6040518060400160405280601681526020017f474f415473206f6620746865204d65746176657273650000000000000000000081525060405180604001604052806004815260200163474f544d60e01b8152508686868686620000a6620000a06200092560201b60201c565b62000929565b600180546001600160a01b031916339081178255620000c59162000979565b6000875111620001285760405162461bcd60e51b8152602060048201526024808201527f4552433732314f7074696d697a65643a206e616d652063616e277420626520656044820152636d70747960e01b60648201526084015b60405180910390fd5b60008651116200018a5760405162461bcd60e51b815260206004820152602660248201527f4552433732314f7074696d697a65643a2073796d626f6c2063616e277420626560448201526520656d70747960d01b60648201526084016200011f565b6000855111620001ed5760405162461bcd60e51b815260206004820152602760248201527f4552433732314f7074696d697a65643a20626173655552492063616e277420626044820152666520656d70747960c81b60648201526084016200011f565b83600001516001600160401b031684602001516001600160401b03161115620002a55760405162461bcd60e51b815260206004820152605b60248201527f4552433732314f7074696d697a65643a206d6178696d756d206d696e7420616d60448201527f6f756e742070657220616464726573732063616e27742065786365656420746860648201527f65206d6178696d756d20746f74616c206d696e7420616d6f756e740000000000608482015260a4016200011f565b600084604001516001600160801b031611620003075760405162461bcd60e51b815260206004820152602b60248201526000805160206200627b83398151915260448201526a626520666f72206672656560a81b60648201526084016200011f565b8360c00151518460a0015151146200035d5760405162461bcd60e51b8152602060048201526024808201526000805160206200625b8339815191526044820152630c2e8c6d60e31b60648201526084016200011f565b600083604001516001600160801b031611620003bf5760405162461bcd60e51b815260206004820152602b60248201526000805160206200627b83398151915260448201526a626520666f72206672656560a81b60648201526084016200011f565b8260c00151518360a001515114620004155760405162461bcd60e51b8152602060048201526024808201526000805160206200625b8339815191526044820152630c2e8c6d60e31b60648201526084016200011f565b6001600160a01b038216156200048c57816001600160a01b031663c311c5236040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000464573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200048a919062000f6a565b505b6001600160a01b0381161562000519576001600160a01b03811663c4552791336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015620004f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000517919062000f95565b505b600362000527888262001044565b50600462000536878262001044565b50600562000545868262001044565b5083516006805460208088015160408901516001600160801b03908116600160801b026001600160401b0392831668010000000000000000026001600160801b0319909516929096169190911792909217919091169290921781556060860151600755608086015160085560a086015180518793620005ca9260099291019062000a17565b5060c08201518051620005e891600484019160209091019062000ad6565b5090505060005b8460a0015151811015620007165760648560c00151828151811062000618576200061862001110565b60200260200101516001600160801b031610620006765760405162461bcd60e51b815260206004820152602660248201526000805160206200629b83398151915260448201526573203130302560d01b60648201526084016200011f565b8460c0015181815181106200068f576200068f62001110565b6020026020010151600b60008760a001518481518110620006b457620006b462001110565b60200260200101516001600160401b03166001600160401b0316815260200190815260200160002060006101000a8154816001600160801b0302191690836001600160801b0316021790555080806200070d9062001126565b915050620005ef565b508251600c805460208087015160408801516001600160801b03908116600160801b026001600160401b0392831668010000000000000000026001600160801b0319909516929096169190911792909217919091169290921781556060850151600d556080850151600e5560a0850151805186936200079b92600f9291019062000a17565b5060c08201518051620007b991600484019160209091019062000ad6565b5090505060005b8360a0015151811015620008e75760648460c001518281518110620007e957620007e962001110565b60200260200101516001600160801b031610620008475760405162461bcd60e51b815260206004820152602660248201526000805160206200629b83398151915260448201526573203130302560d01b60648201526084016200011f565b8360c00151818151811062000860576200086062001110565b6020026020010151601160008660a00151848151811062000885576200088562001110565b60200260200101516001600160401b03166001600160401b0316815260200190815260200160002060006101000a8154816001600160801b0302191690836001600160801b031602179055508080620008de9062001126565b915050620007c0565b50601280546001600160a01b039384166001600160a01b03199182161790915560138054929093169116179055506200114e98505050505050505050565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0382166000908152600260205260409020805460ff19168215801591909117909155620009df576040516001600160a01b038316907ffa6d6e0e6066ffafeb8530b0afbb780c04b0d3d5e2fc471faa21ba5b93eb862290600090a25050565b6040516001600160a01b038316907f95b8a85feae13d3ceffcaa5046474dd7c8672db6c5db535bc40ab057073c61f590600090a25050565b8280548282559060005260206000209060030160049004810192821562000ac45791602002820160005b8382111562000a8d57835183826101000a8154816001600160401b0302191690836001600160401b03160217905550926020019260080160208160070104928301926001030262000a41565b801562000ac25782816101000a8154906001600160401b03021916905560080160208160070104928301926001030262000a8d565b505b5062000ad292915062000b81565b5090565b8280548282559060005260206000209060010160029004810192821562000ac45791602002820160005b8382111562000b4c57835183826101000a8154816001600160801b0302191690836001600160801b031602179055509260200192601001602081600f0104928301926001030262000b00565b801562000ac25782816101000a8154906001600160801b030219169055601001602081600f0104928301926001030262000b4c565b5b8082111562000ad2576000815560010162000b82565b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b038111828210171562000bd35762000bd362000b98565b60405290565b604051601f8201601f191681016001600160401b038111828210171562000c045762000c0462000b98565b604052919050565b80516001600160401b038116811462000c2457600080fd5b919050565b80516001600160801b038116811462000c2457600080fd5b60006001600160401b0382111562000c5d5762000c5d62000b98565b5060051b60200190565b600082601f83011262000c7957600080fd5b8151602062000c9262000c8c8362000c41565b62000bd9565b82815260059290921b8401810191818101908684111562000cb257600080fd5b8286015b8481101562000cd85762000cca8162000c0c565b835291830191830162000cb6565b509695505050505050565b600082601f83011262000cf557600080fd5b8151602062000d0862000c8c8362000c41565b82815260059290921b8401810191818101908684111562000d2857600080fd5b8286015b8481101562000cd85762000d408162000c29565b835291830191830162000d2c565b600060e0828403121562000d6157600080fd5b62000d6b62000bae565b905062000d788262000c0c565b815262000d886020830162000c0c565b602082015262000d9b6040830162000c29565b6040820152606082810151908201526080808301519082015260a08201516001600160401b038082111562000dcf57600080fd5b62000ddd8583860162000c67565b60a084015260c084015191508082111562000df757600080fd5b5062000e068482850162000ce3565b60c08301525092915050565b6001600160a01b038116811462000e2857600080fd5b50565b805162000c248162000e12565b600080600080600060a0868803121562000e5157600080fd5b85516001600160401b038082111562000e6957600080fd5b818801915088601f83011262000e7e57600080fd5b81518181111562000e935762000e9362000b98565b602062000ea9601f8301601f1916820162000bd9565b8281528b8284870101111562000ebe57600080fd5b60005b8381101562000ede57858101830151828201840152820162000ec1565b8381111562000ef05760008385840101525b50908a01519098509250508082111562000f0957600080fd5b62000f1789838a0162000d4e565b9550604088015191508082111562000f2e57600080fd5b5062000f3d8882890162000d4e565b93505062000f4e6060870162000e2b565b915062000f5e6080870162000e2b565b90509295509295909350565b60006020828403121562000f7d57600080fd5b8151801515811462000f8e57600080fd5b9392505050565b60006020828403121562000fa857600080fd5b815162000f8e8162000e12565b600181811c9082168062000fca57607f821691505b60208210810362000feb57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200103f57600081815260208120601f850160051c810160208610156200101a5750805b601f850160051c820191505b818110156200103b5782815560010162001026565b5050505b505050565b81516001600160401b0381111562001060576200106062000b98565b620010788162001071845462000fb5565b8462000ff1565b602080601f831160018114620010b05760008415620010975750858301515b600019600386901b1c1916600185901b1785556200103b565b600085815260208120601f198616915b82811015620010e157888601518255948401946001909101908401620010c0565b5085821015620011005787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b6000600182016200114757634e487b7160e01b600052601160045260246000fd5b5060010190565b6150fd806200115e6000396000f3fe6080604052600436106103295760003560e01c8063715018a6116101a3578063c0e7f7b2116100eb578063dddfa3b61161008f578063e8a3d4851161006c578063e8a3d48514610a57578063e985e9c514610a6c578063ee06dc5d14610a8c578063f2fde38b14610aac57005b8063dddfa3b6146109df578063deeec2c3146109ff578063e7e5590d14610a1f57005b8063c87b56dd116100c8578063c87b56dd14610961578063cd7c032614610981578063d26ea6c01461099f578063d2efdcd3146109bf57005b8063c0e7f7b214610901578063c36ab38014610921578063c37c6e341461094157005b806395d89b4111610152578063a881df141161012f578063a881df1414610811578063b4b5b48f14610826578063b88d4fde146108c1578063c0457d44146108e157005b806395d89b41146107c7578063a22cb465146107dc578063a2309ff8146107fc57005b80638462151c116101805780638462151c146107675780638da5cb5b146107945780639106a059146107b257005b8063715018a6146106f957806377596a011461070e5780637d5b9c231461074757005b806340a6543a116102715780635fb5fe3b116102155780636a2aaff3116101f25780636a2aaff31461067d5780636afcb7b0146106925780636c0360eb146106a557806370a08231146106ba57005b80635fb5fe3b146105b0578063631d9e5c146106485780636352211e1461065d57005b80634f6ccce71161024e5780634f6ccce71461053d57806351cff8d91461055d57806355f804b31461057d5780635f979c321461059d57005b806340a6543a146104f357806342842e0e146105085780634c9b50071461052857005b80631323e371116102d8578063269c759b116102b5578063269c759b146104735780632cd9ff33146104955780632dc06709146104b55780632f745c59146104d357005b80631323e3711461041f57806318160ddd1461043e57806323b872dd1461045357005b8063095ea7b311610306578063095ea7b3146103c15780630ee2cb10146103e15780631138ebae146103ff57005b806301ffc9a71461033257806306fdde0314610367578063081812fc1461038957005b3661033057005b005b34801561033e57600080fd5b5061035261034d36600461439d565b610acc565b60405190151581526020015b60405180910390f35b34801561037357600080fd5b5061037c610b54565b60405161035e9190614412565b34801561039557600080fd5b506103a96103a4366004614425565b610be6565b6040516001600160a01b03909116815260200161035e565b3480156103cd57600080fd5b506103306103dc366004614453565b610c71565b3480156103ed57600080fd5b506001546001600160a01b03166103a9565b34801561040b57600080fd5b5061033061041a366004614494565b610e92565b34801561042b57600080fd5b506019545b60405190815260200161035e565b34801561044a57600080fd5b50601454610430565b34801561045f57600080fd5b5061033061046e3660046144cd565b6110ac565b34801561047f57600080fd5b506104886110bd565b60405161035e919061458b565b3480156104a157600080fd5b506103306104b036600461460d565b61127f565b3480156104c157600080fd5b506012546001600160a01b03166103a9565b3480156104df57600080fd5b506104306104ee366004614453565b611682565b3480156104ff57600080fd5b50601754610430565b34801561051457600080fd5b506103306105233660046144cd565b6117ca565b34801561053457600080fd5b50601654610430565b34801561054957600080fd5b50610430610558366004614425565b61186b565b34801561056957600080fd5b50610330610578366004614647565b6118d7565b34801561058957600080fd5b506103306105983660046146ac565b61198c565b6103306105ab3660046146ed565b611a49565b3480156105bc57600080fd5b506106216105cb366004614647565b6040805180820190915260008082526020820152506001600160a01b03166000908152601c60209081526040918290208251808401909352546001600160801b038082168452600160801b909104169082015290565b6040805182516001600160801b03908116825260209384015116928101929092520161035e565b34801561065457600080fd5b50601854610430565b34801561066957600080fd5b506103a9610678366004614425565b611e48565b34801561068957600080fd5b50601a54610430565b6103306106a03660046146ed565b611ece565b3480156106b157600080fd5b5061037c61211d565b3480156106c657600080fd5b506104306106d5366004614647565b6001600160a01b03166000908152601c60205260409020546001600160801b031690565b34801561070557600080fd5b5061033061212c565b34801561071a57600080fd5b50610352610729366004614647565b6001600160a01b031660009081526002602052604090205460ff1690565b34801561075357600080fd5b50610330610762366004614647565b612140565b34801561077357600080fd5b50610787610782366004614647565b612228565b60405161035e919061470a565b3480156107a057600080fd5b506000546001600160a01b03166103a9565b3480156107be57600080fd5b50610488612388565b3480156107d357600080fd5b5061037c6124f6565b3480156107e857600080fd5b506103306107f736600461475c565b612505565b34801561080857600080fd5b506104306125e4565b34801561081d57600080fd5b506103306125fb565b34801561083257600080fd5b50610894610841366004614425565b6040805180820190915260008082526020820152506000908152601e60209081526040918290208251808401909352546001600160a01b0381168352600160a01b90046001600160601b03169082015290565b6040805182516001600160a01b031681526020928301516001600160601b0316928101929092520161035e565b3480156108cd57600080fd5b506103306108dc36600461478a565b612694565b3480156108ed57600080fd5b506103306108fc36600461475c565b61275e565b34801561090d57600080fd5b5061033061091c3660046147fc565b6127d3565b34801561092d57600080fd5b5061033061093c366004614453565b612970565b34801561094d57600080fd5b5061035261095c366004614425565b6129d5565b34801561096d57600080fd5b5061037c61097c366004614425565b612a54565b34801561098d57600080fd5b506013546001600160a01b03166103a9565b3480156109ab57600080fd5b506103306109ba366004614647565b612a88565b3480156109cb57600080fd5b506103306109da366004614862565b612b86565b3480156109eb57600080fd5b506103306109fa3660046148cd565b612da4565b348015610a0b57600080fd5b50610330610a1a36600461460d565b61304a565b348015610a2b57600080fd5b50610352610a3a366004614647565b6001600160a01b0316600090815260156020526040902054151590565b348015610a6357600080fd5b5061037c613380565b348015610a7857600080fd5b50610352610a873660046148f9565b6133a8565b348015610a9857600080fd5b50610330610aa7366004614862565b61346f565b348015610ab857600080fd5b50610330610ac7366004614647565b613593565b60006001600160e01b031982166380ac58cd60e01b1480610afd57506001600160e01b03198216635b5e139f60e01b145b80610b1857506001600160e01b0319821663780e9d6360e01b145b80610b3357506001600160e01b0319821663959401cd60e01b145b80610b4e57506001600160e01b031982166301ffc9a760e01b145b92915050565b606060038054610b6390614927565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8f90614927565b8015610bdc5780601f10610bb157610100808354040283529160200191610bdc565b820191906000526020600020905b815481529060010190602001808311610bbf57829003601f168201915b5050505050905090565b60006014548210610c555760405162461bcd60e51b815260206004820152602e60248201527f4552433732314f7074696d697a65643a206e6f6e6578697374656e7420746f6b60448201526d32b724b21037b832b930ba34b7b760911b60648201526084015b60405180910390fd5b506000908152601f60205260409020546001600160a01b031690565b6014548110610cd95760405162461bcd60e51b815260206004820152602e60248201527f4552433732314f7074696d697a65643a206e6f6e6578697374656e7420746f6b60448201526d32b724b21037b832b930ba34b7b760911b6064820152608401610c4c565b6000818152601e60205260409020546001600160a01b03163380821480610db957506001600160a01b038083166000908152601d6020908152604080832093851683529290522054151580610db957506013546001600160a01b031615801590610db9575060135460405163c455279160e01b81526001600160a01b03848116600483015283811692169063c455279190602401602060405180830381865afa158015610d8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dae9190614961565b6001600160a01b0316145b610e355760405162461bcd60e51b815260206004820152604160248201527f4552433732314f7074696d697a65643a20617070726f76652063616c6c65722060448201527f6973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6064820152601b60fa1b608482015260a401610c4c565b6000838152601f602052604080822080546001600160a01b0319166001600160a01b0388811691821790925591518693918616917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a450505050565b6012546001600160a01b03163314610f125760405162461bcd60e51b815260206004820152603260248201527f4552433732314f7074696d697a65643a2063616c6c6572206973206e6f74207460448201527f6865206572632037323120666163746f727900000000000000000000000000006064820152608401610c4c565b600d54421015610f7d5760405162461bcd60e51b815260206004820152603060248201527f4552433732314f7074696d697a65643a207075626c6963206d696e742068617360448201526f081b9bdd081e595d081cdd185c9d195960821b6064820152608401610c4c565b600e544210610fe75760405162461bcd60e51b815260206004820152603060248201527f4552433732314f7074696d697a65643a207075626c6963206d696e742068617360448201526f081b9bdd081e595d081cdd185c9d195960821b6064820152608401610c4c565b600c546018546017546001600160401b039283169284169161100891614994565b6110129190614994565b11156110745760405162461bcd60e51b815260206004820152602b60248201527f4552433732314f7074696d697a65643a206578636565647320746f74616c206d60448201526a696e74206d6178696d756d60a81b6064820152608401610c4c565b6110883383836001600160401b0316613609565b806001600160401b0316601860008282546110a39190614994565b90915550505050565b6110b8338484846138ec565b505050565b6111186040518060e0016040528060006001600160401b0316815260200160006001600160401b0316815260200160006001600160801b03168152602001600081526020016000815260200160608152602001606081525090565b6040805160e081018252600c80546001600160401b038082168452600160401b820416602080850191909152600160801b9091046001600160801b031683850152600d546060840152600e546080840152600f80548551818402810184019096528086529394929360a0860193928301828280156111e757602002820191906000526020600020906000905b82829054906101000a90046001600160401b03166001600160401b0316815260200190600801906020826007010492830192600103820291508084116111a45790505b505050505081526020016004820180548060200260200160405190810160405280929190818152602001828054801561127157602002820191906000526020600020906000905b82829054906101000a90046001600160801b03166001600160801b031681526020019060100190602082600f0104928301926001038202915080841161122e5790505b505050505081525050905090565b336112926000546001600160a01b031690565b6001600160a01b031614806112b657503360009081526002602052604090205460ff165b6112d25760405162461bcd60e51b8152600401610c4c906149ac565b6112df60208201826146ed565b6001600160401b03166112f860408301602084016146ed565b6001600160401b0316111561139b5760405162461bcd60e51b815260206004820152605b60248201527f4552433732314f7074696d697a65643a206d6178696d756d206d696e7420616d60448201527f6f756e742070657220616464726573732063616e27742065786365656420746860648201527f65206d6178696d756d20746f74616c206d696e7420616d6f756e740000000000608482015260a401610c4c565b60006113ad6060830160408401614a0c565b6001600160801b0316116114175760405162461bcd60e51b815260206004820152602b60248201527f4552433732314f7074696d697a65643a20746865206d696e742063616e27742060448201526a626520666f72206672656560a81b6064820152608401610c4c565b61142460c0820182614a29565b905061143360a0830183614a29565b90501461148e5760405162461bcd60e51b8152602060048201526024808201527f4552433732314f7074696d697a65643a2061727261792073697a65206d69736d6044820152630c2e8c6d60e31b6064820152608401610c4c565b60005b60095481101561150a57600b6000600660030183815481106114b5576114b5614a72565b6000918252602080832060048304015460039092166008026101000a9091046001600160401b03168352820192909252604001902080546001600160801b03191690558061150281614a88565b915050611491565b508060066115188282614ccf565b90505060005b61152b60a0830183614a29565b905081101561167e57606461154360c0840184614a29565b8381811061155357611553614a72565b90506020020160208101906115689190614a0c565b6001600160801b0316106115cd5760405162461bcd60e51b815260206004820152602660248201527f4552433732314f7074696d697a65643a20646973636f756e742065786365656460448201526573203130302560d01b6064820152608401610c4c565b6115da60c0830183614a29565b828181106115ea576115ea614a72565b90506020020160208101906115ff9190614a0c565b600b600061161060a0860186614a29565b8581811061162057611620614a72565b905060200201602081019061163591906146ed565b6001600160401b03168152602081019190915260400160002080546001600160801b0319166001600160801b03929092169190911790558061167681614a88565b91505061151e565b5050565b6001600160a01b0382166000908152601c60205260408120546001600160801b031682106117075760405162461bcd60e51b815260206004820152602c60248201527f4552433732314f7074696d697a65643a204e6f6e6578697374656e7420696e6460448201526b32bc1037b832b930ba34b7b760a11b6064820152608401610c4c565b60008060005b60145484101561178257506000838152601e60205260409020546001600160a01b0316801561173a578091505b856001600160a01b0316826001600160a01b0316036117705784830361176257505050610b4e565b8261176c81614a88565b9350505b8361177a81614a88565b94505061170d565b60405162461bcd60e51b815260206004820152601f60248201527f4552433732314f7074696d697a65643a206e6f20746f6b656e20666f756e64006044820152606401610c4c565b336117d7818585856138ec565b6117f38185858560405180602001604052806000815250613ea1565b6118655760405162461bcd60e51b815260206004820152603b60248201527f4552433732314f7074696d697a65643a207472616e7366657220746f206e6f6e60448201527f20455243373231526563656976657220696d706c656d656e74657200000000006064820152608401610c4c565b50505050565b600060145482106118d35760405162461bcd60e51b815260206004820152602c60248201527f4552433732314f7074696d697a65643a204e6f6e6578697374656e7420696e6460448201526b32bc1037b832b930ba34b7b760a11b6064820152608401610c4c565b5090565b6118df613ffa565b6000816001600160a01b03164760405160006040518083038185875af1925050503d806000811461192c576040519150601f19603f3d011682016040523d82523d6000602084013e611931565b606091505b505090508061167e5760405162461bcd60e51b815260206004820152602160248201527f4552433732314f7074696d697a65643a205472616e73666572206661696c65646044820152601760f91b6064820152608401610c4c565b3361199f6000546001600160a01b031690565b6001600160a01b031614806119c357503360009081526002602052604090205460ff165b6119df5760405162461bcd60e51b8152600401610c4c906149ac565b80611a3c5760405162461bcd60e51b815260206004820152602760248201527f4552433732314f7074696d697a65643a20626173655552492063616e277420626044820152666520656d70747960c81b6064820152608401610c4c565b60056110b8828483614de2565b600754421015611ac15760405162461bcd60e51b815260206004820152603160248201527f4552433732314f7074696d697a65643a2070726976617465206d696e7420686160448201527f73206e6f742079657420737461727465640000000000000000000000000000006064820152608401610c4c565b6008544210611b225760405162461bcd60e51b815260206004820152602760248201527f4552433732314f7074696d697a65643a2070726976617465206d696e742068616044820152661cc8195b99195960ca1b6064820152608401610c4c565b33600081815260156020526040902054611ba45760405162461bcd60e51b815260206004820152603560248201527f4552433732314f7074696d697a65643a206e6f742077686974656c697374656460448201527f20666f72207468652070726976617465206d696e7400000000000000000000006064820152608401610c4c565b6006546018546017546001600160401b0392831692851691611bc591614994565b611bcf9190614994565b1115611c315760405162461bcd60e51b815260206004820152602b60248201527f4552433732314f7074696d697a65643a206578636565647320746f74616c206d60448201526a696e74206d6178696d756d60a81b6064820152608401610c4c565b6006546001600160a01b0382166000908152601c6020526040902054600160401b9091046001600160401b0390811691611c7d91851690600160801b90046001600160801b0316614ea1565b6001600160801b03161115611ce25760405162461bcd60e51b815260206004820152602560248201527f4552433732314f7074696d697a65643a2065786365656473206d696e74206d6160448201526478696d756d60d81b6064820152608401610c4c565b6001600160401b0382166000908152600b60205260408120546001600160801b0316906064611d118382614ecc565b600654611d3790600160801b90046001600160801b03166001600160401b038816614ef4565b611d419190614ef4565b611d4b9190614f39565b6001600160801b0316905080341015611da65760405162461bcd60e51b815260206004820152601e60248201527f4552433732314f7074696d697a65643a206d697373696e672066756e647300006044820152606401610c4c565b611dba8384866001600160401b0316613609565b6001600160a01b0383166000908152601c6020526040902080546001600160401b0386169190601090611dfe908490600160801b90046001600160801b0316614ea1565b92506101000a8154816001600160801b0302191690836001600160801b03160217905550836001600160401b031660176000828254611e3d9190614994565b909155505050505050565b60006014548210611eb25760405162461bcd60e51b815260206004820152602e60248201527f4552433732314f7074696d697a65643a206e6f6e6578697374656e7420746f6b60448201526d32b724b21037b832b930ba34b7b760911b6064820152608401610c4c565b506000908152601e60205260409020546001600160a01b031690565b600d54421015611f395760405162461bcd60e51b815260206004820152603060248201527f4552433732314f7074696d697a65643a207075626c6963206d696e742068617360448201526f081b9bdd081e595d081cdd185c9d195960821b6064820152608401610c4c565b600e544210611f995760405162461bcd60e51b815260206004820152602660248201527f4552433732314f7074696d697a65643a207075626c6963206d696e742068617360448201526508195b99195960d21b6064820152608401610c4c565b600c5460185460175433926001600160401b039081169290851691611fbe9190614994565b611fc89190614994565b111561202a5760405162461bcd60e51b815260206004820152602b60248201527f4552433732314f7074696d697a65643a206578636565647320746f74616c206d60448201526a696e74206d6178696d756d60a81b6064820152608401610c4c565b6001600160401b0382166000908152601160205260408120546001600160801b03169060646120598382614ecc565b600c5461207f90600160801b90046001600160801b03166001600160401b038816614ef4565b6120899190614ef4565b6120939190614f39565b6001600160801b03169050803410156120ee5760405162461bcd60e51b815260206004820152601e60248201527f4552433732314f7074696d697a65643a206d697373696e672066756e647300006044820152606401610c4c565b6121028384866001600160401b0316613609565b836001600160401b031660186000828254611e3d9190614994565b606060058054610b6390614927565b612134613ffa565b61213e6000614054565b565b336121536000546001600160a01b031690565b6001600160a01b0316148061217757503360009081526002602052604090205460ff165b6121935760405162461bcd60e51b8152600401610c4c906149ac565b6001600160a01b0381161561220657806001600160a01b031663c311c5236040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122049190614f5f565b505b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381166000908152601c60205260409020546060906001600160801b03166001600160401b0381111561226457612264614abb565b60405190808252806020026020018201604052801561228d578160200160208202803683370190505b50905060008080805b601454811015612321576000818152601e60205260409020546001600160a01b0316915081156122c4578192505b856001600160a01b0316836001600160a01b03160361230f578085856122e981614a88565b9650815181106122fb576122fb614a72565b602090810291909101015284518414612321575b8061231981614a88565b915050612296565b50835183146123805760405162461bcd60e51b815260206004820152602560248201527f4552433732314f7074696d697a65643a206e6f7420616c6c20746f6b656e7320604482015264199bdd5b9960da1b6064820152608401610c4c565b505050919050565b6123e36040518060e0016040528060006001600160401b0316815260200160006001600160401b0316815260200160006001600160801b03168152602001600081526020016000815260200160608152602001606081525090565b6040805160e081018252600680546001600160401b038082168452600160401b820416602080850191909152600160801b9091046001600160801b03168385015260075460608401526008546080840152600980548551818402810184019096528086529394929360a0860193928301828280156111e757600091825260209182902080546001600160401b031684529082028301929091600891018084116111a4579050505050505081526020016004820180548060200260200160405190810160405280929190818152602001828054801561127157600091825260209182902080546001600160801b0316845290820283019290916010910180841161122e579050505050505081525050905090565b606060048054610b6390614927565b336001600160a01b03831681036125695760405162461bcd60e51b815260206004820152602260248201527f4552433732314f7074696d697a65643a20617070726f766520746f2063616c6c60448201526132b960f11b6064820152608401610c4c565b81612575576000612578565b60015b6001600160a01b038281166000818152601d602090815260408083209489168084529482529182902060ff95909516909455518515158152919290917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b60006018546017546125f69190614994565b905090565b3361260e6000546001600160a01b031690565b6001600160a01b0316148061263257503360009081526002602052604090205460ff165b61264e5760405162461bcd60e51b8152600401610c4c906149ac565b60005b601454811015612691576000818152601b60205260409020541561267f576000818152601b60205260408120555b8061268981614a88565b915050612651565b50565b336126a1818787876138ec565b6126e48187878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613ea192505050565b6127565760405162461bcd60e51b815260206004820152603b60248201527f4552433732314f7074696d697a65643a207472616e7366657220746f206e6f6e60448201527f20455243373231526563656976657220696d706c656d656e74657200000000006064820152608401610c4c565b505050505050565b6001546001600160a01b031633146127c95760405162461bcd60e51b815260206004820152602860248201527f5368617265644f776e61626c653a2063616c6c6572206973206e6f74207468656044820152671031b932b0ba37b960c11b6064820152608401610c4c565b61167e82826140a4565b336127e66000546001600160a01b031690565b6001600160a01b0316148061280a57503360009081526002602052604090205460ff165b6128265760405162461bcd60e51b8152600401610c4c906149ac565b601454806128348484614994565b111561288d5760405162461bcd60e51b815260206004820152602260248201527f4552433732314f7074696d697a65643a206e6f7420656e6f75676820746f6b656044820152616e7360f01b6064820152608401610c4c565b6000825b828110801561289f57508482105b156128fc57600081815260208052604090205460ff166128ea576128dc336000838152601e60205260409020546001600160a01b03166001613609565b816128e681614a88565b9250505b806128f481614a88565b915050612891565b5083811461295e5760405162461bcd60e51b815260206004820152602960248201527f4552433732314f7074696d697a65643a206469646e2774206d696e74656420616044820152686c6c20746f6b656e7360b81b6064820152608401610c4c565b8060196000828254611e3d9190614994565b6000818152601e60205260409020543390600160a01b90046001600160601b031661299d828086866138ec565b6000928352601e602052604090922080546001600160601b03909316600160a01b026001600160a01b03909316929092179091555050565b60006014548210612a3f5760405162461bcd60e51b815260206004820152602e60248201527f4552433732314f7074696d697a65643a204e6f6e6578697374656e7420746f6b60448201526d32b724b21037b832b930ba34b7b760911b6064820152608401610c4c565b50600090815260208052604090205460ff1690565b60606005612a6183614141565b604051602001612a72929190614fef565b6040516020818303038152906040529050919050565b33612a9b6000546001600160a01b031690565b6001600160a01b03161480612abf57503360009081526002602052604090205460ff165b612adb5760405162461bcd60e51b8152600401610c4c906149ac565b6001600160a01b03811615612b64576001600160a01b03811663c4552791336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b629190614961565b505b601380546001600160a01b0319166001600160a01b0392909216919091179055565b33612b996000546001600160a01b031690565b6001600160a01b03161480612bbd57503360009081526002602052604090205460ff165b612bd95760405162461bcd60e51b8152600401610c4c906149ac565b808314612c345760405162461bcd60e51b8152602060048201526024808201527f4552433732314f7074696d697a65643a2061727261792073697a65206d69736d6044820152630c2e8c6d60e31b6064820152608401610c4c565b60008060005b85811015612d2a57848482818110612c5457612c54614a72565b9050602002016020810190612c699190614a0c565b9150600092505b816001600160801b0316831015612cc65760016020600085601454612c959190614994565b81526020810191909152604001600020805460ff191691151591909117905582612cbe81614a88565b935050612c70565b612cf733888884818110612cdc57612cdc614a72565b9050602002016020810190612cf19190614647565b84613609565b816001600160801b031660166000828254612d129190614994565b90915550819050612d2281614a88565b915050612c3a565b50606460165411156127565760405162461bcd60e51b815260206004820152603060248201527f4552433732314f7074696d697a65643a2065786365656473206d6178696d756d60448201527f207465616d206d696e7420636f756e74000000000000000000000000000000006064820152608401610c4c565b33612db76000546001600160a01b031690565b6001600160a01b03161480612ddb57503360009081526002602052604090205460ff165b612df75760405162461bcd60e51b8152600401610c4c906149ac565b6000826001600160401b03811115612e1157612e11614abb565b604051908082528060200260200182016040528015612e3a578160200160208202803683370190505b509050600080600080612e72604051806040016040528060006001600160a01b0316815260200160006001600160601b031681525090565b8785108015612e965750612e86858961500b565b84601454612e94919061500b565b115b8015612ea157508683105b15612f8557612eba83612eb381614a88565b9450614261565b6000818152601b602052604081205491935003612f8057506000818152601e60209081526040918290208251808401909352546001600160a01b0381168352600160a01b90046001600160601b03169082018190528990612f1b904261500b565b10612f605780518686612f2d81614a88565b975081518110612f3f57612f3f614a72565b60200260200101906001600160a01b031690816001600160a01b0316815250505b83612f6a81614a88565b6000848152601b60205260409020600190559450505b612e72565b878514612fe55760405162461bcd60e51b815260206004820152602860248201527f4552433732314f7074696d697a65643a206469646e277420666f756e6420616c6044820152676c206f776e65727360c01b6064820152608401610c4c565b60005b85811015613027576130153388838151811061300657613006614a72565b60200260200101516001613609565b8061301f81614a88565b915050612fe8565b5087601a600082825461303a9190614994565b9091555050505050505050505050565b3361305d6000546001600160a01b031690565b6001600160a01b0316148061308157503360009081526002602052604090205460ff165b61309d5760405162461bcd60e51b8152600401610c4c906149ac565b60006130af6060830160408401614a0c565b6001600160801b0316116131195760405162461bcd60e51b815260206004820152602b60248201527f4552433732314f7074696d697a65643a20746865206d696e742063616e27742060448201526a626520666f72206672656560a81b6064820152608401610c4c565b61312660c0820182614a29565b905061313560a0830183614a29565b9050146131905760405162461bcd60e51b8152602060048201526024808201527f4552433732314f7074696d697a65643a2061727261792073697a65206d69736d6044820152630c2e8c6d60e31b6064820152608401610c4c565b60005b600f5481101561320c5760116000600c60030183815481106131b7576131b7614a72565b6000918252602080832060048304015460039092166008026101000a9091046001600160401b03168352820192909252604001902080546001600160801b03191690558061320481614a88565b915050613193565b5080600c61321a8282614ccf565b90505060005b61322d60a0830183614a29565b905081101561167e57606461324560c0840184614a29565b8381811061325557613255614a72565b905060200201602081019061326a9190614a0c565b6001600160801b0316106132cf5760405162461bcd60e51b815260206004820152602660248201527f4552433732314f7074696d697a65643a20646973636f756e742065786365656460448201526573203130302560d01b6064820152608401610c4c565b6132dc60c0830183614a29565b828181106132ec576132ec614a72565b90506020020160208101906133019190614a0c565b6011600061331260a0860186614a29565b8581811061332257613322614a72565b905060200201602081019061333791906146ed565b6001600160401b03168152602081019190915260400160002080546001600160801b0319166001600160801b03929092169190911790558061337881614a88565b915050613220565b606060056040516020016133949190615022565b604051602081830303815290604052905090565b6001600160a01b038083166000908152601d6020908152604080832093851683529290529081205415158061346857506013546001600160a01b031615801590613468575060135460405163c455279160e01b81526001600160a01b03858116600483015284811692169063c455279190602401602060405180830381865afa158015613439573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061345d9190614961565b6001600160a01b0316145b9392505050565b336134826000546001600160a01b031690565b6001600160a01b031614806134a657503360009081526002602052604090205460ff165b6134c25760405162461bcd60e51b8152600401610c4c906149ac565b8281146135115760405162461bcd60e51b815260206004820152601f60248201527f4552433732314f7074696d697a65643a206172726179206d69736d61746368006044820152606401610c4c565b60005b8381101561358c5782828281811061352e5761352e614a72565b905060200201356015600087878581811061354b5761354b614a72565b90506020020160208101906135609190614647565b6001600160a01b031681526020810191909152604001600020558061358481614a88565b915050613514565b5050505050565b61359b613ffa565b6001600160a01b0381166136005760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c4c565b61269181614054565b6001600160a01b0382166136715760405162461bcd60e51b815260206004820152602960248201527f4552433732314f7074696d697a65643a206d696e7420746f20746865207a65726044820152686f206164647265737360b81b6064820152608401610c4c565b612710816001600160801b031660145461368b9190614994565b11156136ff5760405162461bcd60e51b815260206004820152602e60248201527f4552433732314f7074696d697a65643a206d696e742065786365656473206d6160448201527f7820746f74616c20737570706c790000000000000000000000000000000000006064820152608401610c4c565b60145460005b826001600160801b031681101561381a576000828152601e60205260408082206001600160a01b038716600160a01b426001600160601b031602811790915590518492907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4613796856000868561377f81614a88565b965060405180602001604052806000815250613ea1565b6138085760405162461bcd60e51b815260206004820152603b60248201527f4552433732314f7074696d697a65643a207472616e7366657220746f206e6f6e60448201527f20455243373231526563656976657220696d706c656d656e74657200000000006064820152608401610c4c565b8061381281614a88565b915050613705565b50816001600160801b03166014546138329190614994565b811461388c5760405162461bcd60e51b8152602060048201526024808201527f4552433732314f7074696d697a65643a205265656e7472616e6379206465746560448201526318dd195960e21b6064820152608401610c4c565b60148190556001600160a01b0383166000908152601c6020526040812080548492906138c29084906001600160801b0316614ea1565b92506101000a8154816001600160801b0302191690836001600160801b0316021790555050505050565b6001600160a01b0383166139685760405162461bcd60e51b815260206004820152602f60248201527f4552433732314f7074696d697a65643a207472616e736665722066726f6d207460448201527f6865207a65726f206164647265737300000000000000000000000000000000006064820152608401610c4c565b6001600160a01b0382166139d45760405162461bcd60e51b815260206004820152602d60248201527f4552433732314f7074696d697a65643a207472616e7366657220746f2074686560448201526c207a65726f206164647265737360981b6064820152608401610c4c565b6014548110613a3c5760405162461bcd60e51b815260206004820152602e60248201527f4552433732314f7074696d697a65643a206e6f6e6578697374656e7420746f6b60448201526d32b724b21037b832b930ba34b7b760911b6064820152608401610c4c565b6000818152601e60205260409020546001600160a01b03848116911614613acb5760405162461bcd60e51b815260206004820152602e60248201527f4552433732314f7074696d697a65643a207472616e736665722066726f6d206960448201527f6e636f7272656374206f776e65720000000000000000000000000000000000006064820152608401610c4c565b836001600160a01b0316836001600160a01b03161480613b0457506000818152601f60205260409020546001600160a01b038581169116145b80613bc857506001600160a01b038084166000908152601d6020908152604080832093881683529290522054151580613bc857506013546001600160a01b031615801590613bc8575060135460405163c455279160e01b81526001600160a01b03858116600483015286811692169063c455279190602401602060405180830381865afa158015613b99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bbd9190614961565b6001600160a01b0316145b613c3a5760405162461bcd60e51b815260206004820152603a60248201527f4552433732314f7074696d697a65643a207472616e736665722063616c6c657260448201527f206973206e6f74206f776e6572206e6f7220617070726f7665640000000000006064820152608401610c4c565b816001600160a01b0316836001600160a01b031603613cb15760405162461bcd60e51b815260206004820152602d60248201527f4552433732314f7074696d697a65643a207472616e7366657220746f2074686560448201526c2073616d65206164647265737360981b6064820152608401610c4c565b600081815260208052604090205460ff161580613cd05750600d544210155b613d4e5760405162461bcd60e51b815260206004820152604360248201527f4552433732314f7074696d697a65643a207472616e73666572206f662074656160448201527f6d206d696e74656420746f6b656e207072696f7220746f207075626c6963206d6064820152621a5b9d60ea1b608482015260a401610c4c565b6000818152601f602052604080822080546001600160a01b0319169055518291906001600160a01b038616907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925908390a46001600160a01b0383166000908152601c60205260408120805460019290613dd19084906001600160801b0316614ecc565b82546101009290920a6001600160801b038181021990931691831602179091556001600160a01b0384166000908152601c602052604081208054600194509092613e1d91859116614ea1565b82546001600160801b039182166101009390930a9283029190920219909116179055506000818152601e60205260408082206001600160601b034216600160a01b026001600160a01b0380871691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a450505050565b60006001600160a01b0384163b15613fed57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290613ee5908990899088908890600401615046565b6020604051808303816000875af1925050508015613f20575060408051601f3d908101601f19168201909252613f1d91810190615082565b60015b613fd3573d808015613f4e576040519150601f19603f3d011682016040523d82523d6000602084013e613f53565b606091505b508051600003613fcb5760405162461bcd60e51b815260206004820152603b60248201527f4552433732314f7074696d697a65643a207472616e7366657220746f206e6f6e60448201527f20455243373231526563656976657220696d706c656d656e74657200000000006064820152608401610c4c565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050613ff1565b5060015b95945050505050565b6000546001600160a01b0316331461213e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c4c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0382166000908152600260205260409020805460ff19168215801591909117909155614109576040516001600160a01b038316907ffa6d6e0e6066ffafeb8530b0afbb780c04b0d3d5e2fc471faa21ba5b93eb862290600090a25050565b6040516001600160a01b038316907f95b8a85feae13d3ceffcaa5046474dd7c8672db6c5db535bc40ab057073c61f590600090a25050565b6060816000036141685750506040805180820190915260018152600360fc1b602082015290565b8160005b8115614192578061417c81614a88565b915061418b9050600a8361509f565b915061416c565b6000816001600160401b038111156141ac576141ac614abb565b6040519080825280601f01601f1916602001820160405280156141d6576020820181803683370190505b5090505b8415614259576141eb60018361500b565b91506141f8600a866150b3565b614203906030614994565b60f81b81838151811061421857614218614a72565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350614252600a8661509f565b94506141da565b949350505050565b6040516bffffffffffffffffffffffff193360601b16602082015260009081908390439042906034016040516020818303038152906040528051906020012060001c6142ad919061509f565b6040516bffffffffffffffffffffffff194160601b166020820152459042906034016040516020818303038152906040528051906020012060001c6142f2919061509f565b446142fd428a614994565b6143079190614994565b6143119190614994565b61431b9190614994565b6143259190614994565b61432f9190614994565b6143399190614994565b60405160200161434b91815260200190565b60408051601f198184030181529190528051602090910120601454909150614373818361509f565b61437d9190614ad1565b613468908261500b565b6001600160e01b03198116811461269157600080fd5b6000602082840312156143af57600080fd5b813561346881614387565b60005b838110156143d55781810151838201526020016143bd565b838111156118655750506000910152565b600081518084526143fe8160208601602086016143ba565b601f01601f19169290920160200192915050565b60208152600061346860208301846143e6565b60006020828403121561443757600080fd5b5035919050565b6001600160a01b038116811461269157600080fd5b6000806040838503121561446657600080fd5b82356144718161443e565b946020939093013593505050565b6001600160401b038116811461269157600080fd5b600080604083850312156144a757600080fd5b82356144b28161443e565b915060208301356144c28161447f565b809150509250929050565b6000806000606084860312156144e257600080fd5b83356144ed8161443e565b925060208401356144fd8161443e565b929592945050506040919091013590565b600081518084526020808501945080840160005b838110156145475781516001600160401b031687529582019590820190600101614522565b509495945050505050565b600081518084526020808501945080840160005b838110156145475781516001600160801b031687529582019590820190600101614566565b6020815260006001600160401b03808451166020840152806020850151166040840152506001600160801b03604084015116606083015260608301516080830152608083015160a083015260a083015160e060c08401526145f061010084018261450e565b905060c0840151601f198483030160e0850152613ff18282614552565b60006020828403121561461f57600080fd5b81356001600160401b0381111561463557600080fd5b820160e0818503121561346857600080fd5b60006020828403121561465957600080fd5b81356134688161443e565b60008083601f84011261467657600080fd5b5081356001600160401b0381111561468d57600080fd5b6020830191508360208285010111156146a557600080fd5b9250929050565b600080602083850312156146bf57600080fd5b82356001600160401b038111156146d557600080fd5b6146e185828601614664565b90969095509350505050565b6000602082840312156146ff57600080fd5b81356134688161447f565b6020808252825182820181905260009190848201906040850190845b8181101561474257835183529284019291840191600101614726565b50909695505050505050565b801515811461269157600080fd5b6000806040838503121561476f57600080fd5b823561477a8161443e565b915060208301356144c28161474e565b6000806000806000608086880312156147a257600080fd5b85356147ad8161443e565b945060208601356147bd8161443e565b93506040860135925060608601356001600160401b038111156147df57600080fd5b6147eb88828901614664565b969995985093965092949392505050565b6000806040838503121561480f57600080fd5b50508035926020909101359150565b60008083601f84011261483057600080fd5b5081356001600160401b0381111561484757600080fd5b6020830191508360208260051b85010111156146a557600080fd5b6000806000806040858703121561487857600080fd5b84356001600160401b038082111561488f57600080fd5b61489b8883890161481e565b909650945060208701359150808211156148b457600080fd5b506148c18782880161481e565b95989497509550505050565b6000806000606084860312156148e257600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561490c57600080fd5b82356149178161443e565b915060208301356144c28161443e565b600181811c9082168061493b57607f821691505b60208210810361495b57634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561497357600080fd5b81516134688161443e565b634e487b7160e01b600052601160045260246000fd5b600082198211156149a7576149a761497e565b500190565b6020808252602b908201527f5368617265644f776e61626c653a2063616c6c6572206973206e6f742061207360408201526a3430b932b21037bbb732b960a91b606082015260800190565b6001600160801b038116811461269157600080fd5b600060208284031215614a1e57600080fd5b8135613468816149f7565b6000808335601e19843603018112614a4057600080fd5b8301803591506001600160401b03821115614a5a57600080fd5b6020019150600581901b36038213156146a557600080fd5b634e487b7160e01b600052603260045260246000fd5b600060018201614a9a57614a9a61497e565b5060010190565b60008135610b4e8161447f565b60008135610b4e816149f7565b634e487b7160e01b600052604160045260246000fd5b6000816000190483118215151615614aeb57614aeb61497e565b500290565b5b8181101561167e5760008155600101614af1565b600160401b831115614b1957614b19614abb565b805483825580841015614b78578160005260206000206003850160021c810160188660031b168015614b6257614b6281600019840180546000198360200360031b1c1681555050565b50614b756003840160021c830182614af0565b50505b506000818152602081208391805b86811015614be557614bbd614b9a85614aa1565b84546001600160401b03600386901b81811b801990931693909116901b16178455565b6020840193506008820191506018821115614bdd57600091506001830192505b600101614b86565b50505050505050565b600160401b831115614c0257614c02614abb565b805483825580841015614c61578160005260206000206001850160011c810160108660041b168015614c4b57614c4b81600019840180546000198360200360031b1c1681555050565b50614c5e6001840160011c830182614af0565b50505b506000818152602081208391805b86811015614be557614ca6614c8385614aae565b84546001600160801b03600386901b81811b801990931693909116901b16178455565b6020840193506010808301925080831115614cc657600092506001840193505b50600101614c6f565b8135614cda8161447f565b6001600160401b03811690508154816001600160401b031982161783556020840135614d058161447f565b6fffffffffffffffff00000000000000008160401b16836001600160801b0319841617178455505050614d5d614d3d60408401614aae565b82546001600160801b031660809190911b6001600160801b031916178255565b6060820135600182015560808201356002820155614d7e60a0830183614a29565b614d8c818360038601614b05565b5050614d9b60c0830183614a29565b611865818360048601614bee565b601f8211156110b857806000526020600020601f840160051c81016020851015614dd05750805b61358c601f850160051c830182614af0565b6001600160401b03831115614df957614df9614abb565b614e0d83614e078354614927565b83614da9565b6000601f841160018114614e415760008515614e295750838201355b600019600387901b1c1916600186901b17835561358c565b600083815260209020601f19861690835b82811015614e725786850135825560209485019460019092019101614e52565b5086821015614e8f5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60006001600160801b03808316818516808303821115614ec357614ec361497e565b01949350505050565b60006001600160801b0383811690831681811015614eec57614eec61497e565b039392505050565b60006001600160801b0380831681851681830481118215151615614f1a57614f1a61497e565b02949350505050565b634e487b7160e01b600052601260045260246000fd5b60006001600160801b0380841680614f5357614f53614f23565b92169190910492915050565b600060208284031215614f7157600080fd5b81516134688161474e565b60008154614f8981614927565b60018281168015614fa15760018114614fb657614fe5565b60ff1984168752821515830287019450614fe5565b8560005260208060002060005b85811015614fdc5781548a820152908401908201614fc3565b50505082870194505b5050505092915050565b6000614ffb8285614f7c565b8351614ec38183602088016143ba565b60008282101561501d5761501d61497e565b500390565b600061502e8284614f7c565b6718dbdb9d1c9858dd60c21b81526008019392505050565b60006001600160a01b0380871683528086166020840152508360408301526080606083015261507860808301846143e6565b9695505050505050565b60006020828403121561509457600080fd5b815161346881614387565b6000826150ae576150ae614f23565b500490565b6000826150c2576150c2614f23565b50069056fea264697066735822122067136926e0db5d13ce3197c9143afd98b79caea8938fa74e4546b8a9e86eaf0864736f6c634300080f00334552433732314f7074696d697a65643a2061727261792073697a65206d69736d4552433732314f7074696d697a65643a20746865206d696e742063616e2774204552433732314f7074696d697a65643a20646973636f756e742065786365656400000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000003400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1000000000000000000000000000000000000000000000000000000000000004a68747470733a2f2f3571693333746f3636786f6536326c71656d6d666d61747076693079616d6e622e6c616d6264612d75726c2e75732d656173742d312e6f6e2e6177732f676f746d2f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022ba00000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000214e8348c4f00000000000000000000000000000000000000000000000000000000000062ed30700000000000000000000000000000000000000000000000000000000062ee81ef00000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000022ba00000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000214e8348c4f00000000000000000000000000000000000000000000000000000000000062ee81f00000000000000000000000000000000000000000000000000000000070dbd88000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106103295760003560e01c8063715018a6116101a3578063c0e7f7b2116100eb578063dddfa3b61161008f578063e8a3d4851161006c578063e8a3d48514610a57578063e985e9c514610a6c578063ee06dc5d14610a8c578063f2fde38b14610aac57005b8063dddfa3b6146109df578063deeec2c3146109ff578063e7e5590d14610a1f57005b8063c87b56dd116100c8578063c87b56dd14610961578063cd7c032614610981578063d26ea6c01461099f578063d2efdcd3146109bf57005b8063c0e7f7b214610901578063c36ab38014610921578063c37c6e341461094157005b806395d89b4111610152578063a881df141161012f578063a881df1414610811578063b4b5b48f14610826578063b88d4fde146108c1578063c0457d44146108e157005b806395d89b41146107c7578063a22cb465146107dc578063a2309ff8146107fc57005b80638462151c116101805780638462151c146107675780638da5cb5b146107945780639106a059146107b257005b8063715018a6146106f957806377596a011461070e5780637d5b9c231461074757005b806340a6543a116102715780635fb5fe3b116102155780636a2aaff3116101f25780636a2aaff31461067d5780636afcb7b0146106925780636c0360eb146106a557806370a08231146106ba57005b80635fb5fe3b146105b0578063631d9e5c146106485780636352211e1461065d57005b80634f6ccce71161024e5780634f6ccce71461053d57806351cff8d91461055d57806355f804b31461057d5780635f979c321461059d57005b806340a6543a146104f357806342842e0e146105085780634c9b50071461052857005b80631323e371116102d8578063269c759b116102b5578063269c759b146104735780632cd9ff33146104955780632dc06709146104b55780632f745c59146104d357005b80631323e3711461041f57806318160ddd1461043e57806323b872dd1461045357005b8063095ea7b311610306578063095ea7b3146103c15780630ee2cb10146103e15780631138ebae146103ff57005b806301ffc9a71461033257806306fdde0314610367578063081812fc1461038957005b3661033057005b005b34801561033e57600080fd5b5061035261034d36600461439d565b610acc565b60405190151581526020015b60405180910390f35b34801561037357600080fd5b5061037c610b54565b60405161035e9190614412565b34801561039557600080fd5b506103a96103a4366004614425565b610be6565b6040516001600160a01b03909116815260200161035e565b3480156103cd57600080fd5b506103306103dc366004614453565b610c71565b3480156103ed57600080fd5b506001546001600160a01b03166103a9565b34801561040b57600080fd5b5061033061041a366004614494565b610e92565b34801561042b57600080fd5b506019545b60405190815260200161035e565b34801561044a57600080fd5b50601454610430565b34801561045f57600080fd5b5061033061046e3660046144cd565b6110ac565b34801561047f57600080fd5b506104886110bd565b60405161035e919061458b565b3480156104a157600080fd5b506103306104b036600461460d565b61127f565b3480156104c157600080fd5b506012546001600160a01b03166103a9565b3480156104df57600080fd5b506104306104ee366004614453565b611682565b3480156104ff57600080fd5b50601754610430565b34801561051457600080fd5b506103306105233660046144cd565b6117ca565b34801561053457600080fd5b50601654610430565b34801561054957600080fd5b50610430610558366004614425565b61186b565b34801561056957600080fd5b50610330610578366004614647565b6118d7565b34801561058957600080fd5b506103306105983660046146ac565b61198c565b6103306105ab3660046146ed565b611a49565b3480156105bc57600080fd5b506106216105cb366004614647565b6040805180820190915260008082526020820152506001600160a01b03166000908152601c60209081526040918290208251808401909352546001600160801b038082168452600160801b909104169082015290565b6040805182516001600160801b03908116825260209384015116928101929092520161035e565b34801561065457600080fd5b50601854610430565b34801561066957600080fd5b506103a9610678366004614425565b611e48565b34801561068957600080fd5b50601a54610430565b6103306106a03660046146ed565b611ece565b3480156106b157600080fd5b5061037c61211d565b3480156106c657600080fd5b506104306106d5366004614647565b6001600160a01b03166000908152601c60205260409020546001600160801b031690565b34801561070557600080fd5b5061033061212c565b34801561071a57600080fd5b50610352610729366004614647565b6001600160a01b031660009081526002602052604090205460ff1690565b34801561075357600080fd5b50610330610762366004614647565b612140565b34801561077357600080fd5b50610787610782366004614647565b612228565b60405161035e919061470a565b3480156107a057600080fd5b506000546001600160a01b03166103a9565b3480156107be57600080fd5b50610488612388565b3480156107d357600080fd5b5061037c6124f6565b3480156107e857600080fd5b506103306107f736600461475c565b612505565b34801561080857600080fd5b506104306125e4565b34801561081d57600080fd5b506103306125fb565b34801561083257600080fd5b50610894610841366004614425565b6040805180820190915260008082526020820152506000908152601e60209081526040918290208251808401909352546001600160a01b0381168352600160a01b90046001600160601b03169082015290565b6040805182516001600160a01b031681526020928301516001600160601b0316928101929092520161035e565b3480156108cd57600080fd5b506103306108dc36600461478a565b612694565b3480156108ed57600080fd5b506103306108fc36600461475c565b61275e565b34801561090d57600080fd5b5061033061091c3660046147fc565b6127d3565b34801561092d57600080fd5b5061033061093c366004614453565b612970565b34801561094d57600080fd5b5061035261095c366004614425565b6129d5565b34801561096d57600080fd5b5061037c61097c366004614425565b612a54565b34801561098d57600080fd5b506013546001600160a01b03166103a9565b3480156109ab57600080fd5b506103306109ba366004614647565b612a88565b3480156109cb57600080fd5b506103306109da366004614862565b612b86565b3480156109eb57600080fd5b506103306109fa3660046148cd565b612da4565b348015610a0b57600080fd5b50610330610a1a36600461460d565b61304a565b348015610a2b57600080fd5b50610352610a3a366004614647565b6001600160a01b0316600090815260156020526040902054151590565b348015610a6357600080fd5b5061037c613380565b348015610a7857600080fd5b50610352610a873660046148f9565b6133a8565b348015610a9857600080fd5b50610330610aa7366004614862565b61346f565b348015610ab857600080fd5b50610330610ac7366004614647565b613593565b60006001600160e01b031982166380ac58cd60e01b1480610afd57506001600160e01b03198216635b5e139f60e01b145b80610b1857506001600160e01b0319821663780e9d6360e01b145b80610b3357506001600160e01b0319821663959401cd60e01b145b80610b4e57506001600160e01b031982166301ffc9a760e01b145b92915050565b606060038054610b6390614927565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8f90614927565b8015610bdc5780601f10610bb157610100808354040283529160200191610bdc565b820191906000526020600020905b815481529060010190602001808311610bbf57829003601f168201915b5050505050905090565b60006014548210610c555760405162461bcd60e51b815260206004820152602e60248201527f4552433732314f7074696d697a65643a206e6f6e6578697374656e7420746f6b60448201526d32b724b21037b832b930ba34b7b760911b60648201526084015b60405180910390fd5b506000908152601f60205260409020546001600160a01b031690565b6014548110610cd95760405162461bcd60e51b815260206004820152602e60248201527f4552433732314f7074696d697a65643a206e6f6e6578697374656e7420746f6b60448201526d32b724b21037b832b930ba34b7b760911b6064820152608401610c4c565b6000818152601e60205260409020546001600160a01b03163380821480610db957506001600160a01b038083166000908152601d6020908152604080832093851683529290522054151580610db957506013546001600160a01b031615801590610db9575060135460405163c455279160e01b81526001600160a01b03848116600483015283811692169063c455279190602401602060405180830381865afa158015610d8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dae9190614961565b6001600160a01b0316145b610e355760405162461bcd60e51b815260206004820152604160248201527f4552433732314f7074696d697a65643a20617070726f76652063616c6c65722060448201527f6973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6064820152601b60fa1b608482015260a401610c4c565b6000838152601f602052604080822080546001600160a01b0319166001600160a01b0388811691821790925591518693918616917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a450505050565b6012546001600160a01b03163314610f125760405162461bcd60e51b815260206004820152603260248201527f4552433732314f7074696d697a65643a2063616c6c6572206973206e6f74207460448201527f6865206572632037323120666163746f727900000000000000000000000000006064820152608401610c4c565b600d54421015610f7d5760405162461bcd60e51b815260206004820152603060248201527f4552433732314f7074696d697a65643a207075626c6963206d696e742068617360448201526f081b9bdd081e595d081cdd185c9d195960821b6064820152608401610c4c565b600e544210610fe75760405162461bcd60e51b815260206004820152603060248201527f4552433732314f7074696d697a65643a207075626c6963206d696e742068617360448201526f081b9bdd081e595d081cdd185c9d195960821b6064820152608401610c4c565b600c546018546017546001600160401b039283169284169161100891614994565b6110129190614994565b11156110745760405162461bcd60e51b815260206004820152602b60248201527f4552433732314f7074696d697a65643a206578636565647320746f74616c206d60448201526a696e74206d6178696d756d60a81b6064820152608401610c4c565b6110883383836001600160401b0316613609565b806001600160401b0316601860008282546110a39190614994565b90915550505050565b6110b8338484846138ec565b505050565b6111186040518060e0016040528060006001600160401b0316815260200160006001600160401b0316815260200160006001600160801b03168152602001600081526020016000815260200160608152602001606081525090565b6040805160e081018252600c80546001600160401b038082168452600160401b820416602080850191909152600160801b9091046001600160801b031683850152600d546060840152600e546080840152600f80548551818402810184019096528086529394929360a0860193928301828280156111e757602002820191906000526020600020906000905b82829054906101000a90046001600160401b03166001600160401b0316815260200190600801906020826007010492830192600103820291508084116111a45790505b505050505081526020016004820180548060200260200160405190810160405280929190818152602001828054801561127157602002820191906000526020600020906000905b82829054906101000a90046001600160801b03166001600160801b031681526020019060100190602082600f0104928301926001038202915080841161122e5790505b505050505081525050905090565b336112926000546001600160a01b031690565b6001600160a01b031614806112b657503360009081526002602052604090205460ff165b6112d25760405162461bcd60e51b8152600401610c4c906149ac565b6112df60208201826146ed565b6001600160401b03166112f860408301602084016146ed565b6001600160401b0316111561139b5760405162461bcd60e51b815260206004820152605b60248201527f4552433732314f7074696d697a65643a206d6178696d756d206d696e7420616d60448201527f6f756e742070657220616464726573732063616e27742065786365656420746860648201527f65206d6178696d756d20746f74616c206d696e7420616d6f756e740000000000608482015260a401610c4c565b60006113ad6060830160408401614a0c565b6001600160801b0316116114175760405162461bcd60e51b815260206004820152602b60248201527f4552433732314f7074696d697a65643a20746865206d696e742063616e27742060448201526a626520666f72206672656560a81b6064820152608401610c4c565b61142460c0820182614a29565b905061143360a0830183614a29565b90501461148e5760405162461bcd60e51b8152602060048201526024808201527f4552433732314f7074696d697a65643a2061727261792073697a65206d69736d6044820152630c2e8c6d60e31b6064820152608401610c4c565b60005b60095481101561150a57600b6000600660030183815481106114b5576114b5614a72565b6000918252602080832060048304015460039092166008026101000a9091046001600160401b03168352820192909252604001902080546001600160801b03191690558061150281614a88565b915050611491565b508060066115188282614ccf565b90505060005b61152b60a0830183614a29565b905081101561167e57606461154360c0840184614a29565b8381811061155357611553614a72565b90506020020160208101906115689190614a0c565b6001600160801b0316106115cd5760405162461bcd60e51b815260206004820152602660248201527f4552433732314f7074696d697a65643a20646973636f756e742065786365656460448201526573203130302560d01b6064820152608401610c4c565b6115da60c0830183614a29565b828181106115ea576115ea614a72565b90506020020160208101906115ff9190614a0c565b600b600061161060a0860186614a29565b8581811061162057611620614a72565b905060200201602081019061163591906146ed565b6001600160401b03168152602081019190915260400160002080546001600160801b0319166001600160801b03929092169190911790558061167681614a88565b91505061151e565b5050565b6001600160a01b0382166000908152601c60205260408120546001600160801b031682106117075760405162461bcd60e51b815260206004820152602c60248201527f4552433732314f7074696d697a65643a204e6f6e6578697374656e7420696e6460448201526b32bc1037b832b930ba34b7b760a11b6064820152608401610c4c565b60008060005b60145484101561178257506000838152601e60205260409020546001600160a01b0316801561173a578091505b856001600160a01b0316826001600160a01b0316036117705784830361176257505050610b4e565b8261176c81614a88565b9350505b8361177a81614a88565b94505061170d565b60405162461bcd60e51b815260206004820152601f60248201527f4552433732314f7074696d697a65643a206e6f20746f6b656e20666f756e64006044820152606401610c4c565b336117d7818585856138ec565b6117f38185858560405180602001604052806000815250613ea1565b6118655760405162461bcd60e51b815260206004820152603b60248201527f4552433732314f7074696d697a65643a207472616e7366657220746f206e6f6e60448201527f20455243373231526563656976657220696d706c656d656e74657200000000006064820152608401610c4c565b50505050565b600060145482106118d35760405162461bcd60e51b815260206004820152602c60248201527f4552433732314f7074696d697a65643a204e6f6e6578697374656e7420696e6460448201526b32bc1037b832b930ba34b7b760a11b6064820152608401610c4c565b5090565b6118df613ffa565b6000816001600160a01b03164760405160006040518083038185875af1925050503d806000811461192c576040519150601f19603f3d011682016040523d82523d6000602084013e611931565b606091505b505090508061167e5760405162461bcd60e51b815260206004820152602160248201527f4552433732314f7074696d697a65643a205472616e73666572206661696c65646044820152601760f91b6064820152608401610c4c565b3361199f6000546001600160a01b031690565b6001600160a01b031614806119c357503360009081526002602052604090205460ff165b6119df5760405162461bcd60e51b8152600401610c4c906149ac565b80611a3c5760405162461bcd60e51b815260206004820152602760248201527f4552433732314f7074696d697a65643a20626173655552492063616e277420626044820152666520656d70747960c81b6064820152608401610c4c565b60056110b8828483614de2565b600754421015611ac15760405162461bcd60e51b815260206004820152603160248201527f4552433732314f7074696d697a65643a2070726976617465206d696e7420686160448201527f73206e6f742079657420737461727465640000000000000000000000000000006064820152608401610c4c565b6008544210611b225760405162461bcd60e51b815260206004820152602760248201527f4552433732314f7074696d697a65643a2070726976617465206d696e742068616044820152661cc8195b99195960ca1b6064820152608401610c4c565b33600081815260156020526040902054611ba45760405162461bcd60e51b815260206004820152603560248201527f4552433732314f7074696d697a65643a206e6f742077686974656c697374656460448201527f20666f72207468652070726976617465206d696e7400000000000000000000006064820152608401610c4c565b6006546018546017546001600160401b0392831692851691611bc591614994565b611bcf9190614994565b1115611c315760405162461bcd60e51b815260206004820152602b60248201527f4552433732314f7074696d697a65643a206578636565647320746f74616c206d60448201526a696e74206d6178696d756d60a81b6064820152608401610c4c565b6006546001600160a01b0382166000908152601c6020526040902054600160401b9091046001600160401b0390811691611c7d91851690600160801b90046001600160801b0316614ea1565b6001600160801b03161115611ce25760405162461bcd60e51b815260206004820152602560248201527f4552433732314f7074696d697a65643a2065786365656473206d696e74206d6160448201526478696d756d60d81b6064820152608401610c4c565b6001600160401b0382166000908152600b60205260408120546001600160801b0316906064611d118382614ecc565b600654611d3790600160801b90046001600160801b03166001600160401b038816614ef4565b611d419190614ef4565b611d4b9190614f39565b6001600160801b0316905080341015611da65760405162461bcd60e51b815260206004820152601e60248201527f4552433732314f7074696d697a65643a206d697373696e672066756e647300006044820152606401610c4c565b611dba8384866001600160401b0316613609565b6001600160a01b0383166000908152601c6020526040902080546001600160401b0386169190601090611dfe908490600160801b90046001600160801b0316614ea1565b92506101000a8154816001600160801b0302191690836001600160801b03160217905550836001600160401b031660176000828254611e3d9190614994565b909155505050505050565b60006014548210611eb25760405162461bcd60e51b815260206004820152602e60248201527f4552433732314f7074696d697a65643a206e6f6e6578697374656e7420746f6b60448201526d32b724b21037b832b930ba34b7b760911b6064820152608401610c4c565b506000908152601e60205260409020546001600160a01b031690565b600d54421015611f395760405162461bcd60e51b815260206004820152603060248201527f4552433732314f7074696d697a65643a207075626c6963206d696e742068617360448201526f081b9bdd081e595d081cdd185c9d195960821b6064820152608401610c4c565b600e544210611f995760405162461bcd60e51b815260206004820152602660248201527f4552433732314f7074696d697a65643a207075626c6963206d696e742068617360448201526508195b99195960d21b6064820152608401610c4c565b600c5460185460175433926001600160401b039081169290851691611fbe9190614994565b611fc89190614994565b111561202a5760405162461bcd60e51b815260206004820152602b60248201527f4552433732314f7074696d697a65643a206578636565647320746f74616c206d60448201526a696e74206d6178696d756d60a81b6064820152608401610c4c565b6001600160401b0382166000908152601160205260408120546001600160801b03169060646120598382614ecc565b600c5461207f90600160801b90046001600160801b03166001600160401b038816614ef4565b6120899190614ef4565b6120939190614f39565b6001600160801b03169050803410156120ee5760405162461bcd60e51b815260206004820152601e60248201527f4552433732314f7074696d697a65643a206d697373696e672066756e647300006044820152606401610c4c565b6121028384866001600160401b0316613609565b836001600160401b031660186000828254611e3d9190614994565b606060058054610b6390614927565b612134613ffa565b61213e6000614054565b565b336121536000546001600160a01b031690565b6001600160a01b0316148061217757503360009081526002602052604090205460ff165b6121935760405162461bcd60e51b8152600401610c4c906149ac565b6001600160a01b0381161561220657806001600160a01b031663c311c5236040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122049190614f5f565b505b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381166000908152601c60205260409020546060906001600160801b03166001600160401b0381111561226457612264614abb565b60405190808252806020026020018201604052801561228d578160200160208202803683370190505b50905060008080805b601454811015612321576000818152601e60205260409020546001600160a01b0316915081156122c4578192505b856001600160a01b0316836001600160a01b03160361230f578085856122e981614a88565b9650815181106122fb576122fb614a72565b602090810291909101015284518414612321575b8061231981614a88565b915050612296565b50835183146123805760405162461bcd60e51b815260206004820152602560248201527f4552433732314f7074696d697a65643a206e6f7420616c6c20746f6b656e7320604482015264199bdd5b9960da1b6064820152608401610c4c565b505050919050565b6123e36040518060e0016040528060006001600160401b0316815260200160006001600160401b0316815260200160006001600160801b03168152602001600081526020016000815260200160608152602001606081525090565b6040805160e081018252600680546001600160401b038082168452600160401b820416602080850191909152600160801b9091046001600160801b03168385015260075460608401526008546080840152600980548551818402810184019096528086529394929360a0860193928301828280156111e757600091825260209182902080546001600160401b031684529082028301929091600891018084116111a4579050505050505081526020016004820180548060200260200160405190810160405280929190818152602001828054801561127157600091825260209182902080546001600160801b0316845290820283019290916010910180841161122e579050505050505081525050905090565b606060048054610b6390614927565b336001600160a01b03831681036125695760405162461bcd60e51b815260206004820152602260248201527f4552433732314f7074696d697a65643a20617070726f766520746f2063616c6c60448201526132b960f11b6064820152608401610c4c565b81612575576000612578565b60015b6001600160a01b038281166000818152601d602090815260408083209489168084529482529182902060ff95909516909455518515158152919290917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b60006018546017546125f69190614994565b905090565b3361260e6000546001600160a01b031690565b6001600160a01b0316148061263257503360009081526002602052604090205460ff165b61264e5760405162461bcd60e51b8152600401610c4c906149ac565b60005b601454811015612691576000818152601b60205260409020541561267f576000818152601b60205260408120555b8061268981614a88565b915050612651565b50565b336126a1818787876138ec565b6126e48187878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613ea192505050565b6127565760405162461bcd60e51b815260206004820152603b60248201527f4552433732314f7074696d697a65643a207472616e7366657220746f206e6f6e60448201527f20455243373231526563656976657220696d706c656d656e74657200000000006064820152608401610c4c565b505050505050565b6001546001600160a01b031633146127c95760405162461bcd60e51b815260206004820152602860248201527f5368617265644f776e61626c653a2063616c6c6572206973206e6f74207468656044820152671031b932b0ba37b960c11b6064820152608401610c4c565b61167e82826140a4565b336127e66000546001600160a01b031690565b6001600160a01b0316148061280a57503360009081526002602052604090205460ff165b6128265760405162461bcd60e51b8152600401610c4c906149ac565b601454806128348484614994565b111561288d5760405162461bcd60e51b815260206004820152602260248201527f4552433732314f7074696d697a65643a206e6f7420656e6f75676820746f6b656044820152616e7360f01b6064820152608401610c4c565b6000825b828110801561289f57508482105b156128fc57600081815260208052604090205460ff166128ea576128dc336000838152601e60205260409020546001600160a01b03166001613609565b816128e681614a88565b9250505b806128f481614a88565b915050612891565b5083811461295e5760405162461bcd60e51b815260206004820152602960248201527f4552433732314f7074696d697a65643a206469646e2774206d696e74656420616044820152686c6c20746f6b656e7360b81b6064820152608401610c4c565b8060196000828254611e3d9190614994565b6000818152601e60205260409020543390600160a01b90046001600160601b031661299d828086866138ec565b6000928352601e602052604090922080546001600160601b03909316600160a01b026001600160a01b03909316929092179091555050565b60006014548210612a3f5760405162461bcd60e51b815260206004820152602e60248201527f4552433732314f7074696d697a65643a204e6f6e6578697374656e7420746f6b60448201526d32b724b21037b832b930ba34b7b760911b6064820152608401610c4c565b50600090815260208052604090205460ff1690565b60606005612a6183614141565b604051602001612a72929190614fef565b6040516020818303038152906040529050919050565b33612a9b6000546001600160a01b031690565b6001600160a01b03161480612abf57503360009081526002602052604090205460ff165b612adb5760405162461bcd60e51b8152600401610c4c906149ac565b6001600160a01b03811615612b64576001600160a01b03811663c4552791336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b629190614961565b505b601380546001600160a01b0319166001600160a01b0392909216919091179055565b33612b996000546001600160a01b031690565b6001600160a01b03161480612bbd57503360009081526002602052604090205460ff165b612bd95760405162461bcd60e51b8152600401610c4c906149ac565b808314612c345760405162461bcd60e51b8152602060048201526024808201527f4552433732314f7074696d697a65643a2061727261792073697a65206d69736d6044820152630c2e8c6d60e31b6064820152608401610c4c565b60008060005b85811015612d2a57848482818110612c5457612c54614a72565b9050602002016020810190612c699190614a0c565b9150600092505b816001600160801b0316831015612cc65760016020600085601454612c959190614994565b81526020810191909152604001600020805460ff191691151591909117905582612cbe81614a88565b935050612c70565b612cf733888884818110612cdc57612cdc614a72565b9050602002016020810190612cf19190614647565b84613609565b816001600160801b031660166000828254612d129190614994565b90915550819050612d2281614a88565b915050612c3a565b50606460165411156127565760405162461bcd60e51b815260206004820152603060248201527f4552433732314f7074696d697a65643a2065786365656473206d6178696d756d60448201527f207465616d206d696e7420636f756e74000000000000000000000000000000006064820152608401610c4c565b33612db76000546001600160a01b031690565b6001600160a01b03161480612ddb57503360009081526002602052604090205460ff165b612df75760405162461bcd60e51b8152600401610c4c906149ac565b6000826001600160401b03811115612e1157612e11614abb565b604051908082528060200260200182016040528015612e3a578160200160208202803683370190505b509050600080600080612e72604051806040016040528060006001600160a01b0316815260200160006001600160601b031681525090565b8785108015612e965750612e86858961500b565b84601454612e94919061500b565b115b8015612ea157508683105b15612f8557612eba83612eb381614a88565b9450614261565b6000818152601b602052604081205491935003612f8057506000818152601e60209081526040918290208251808401909352546001600160a01b0381168352600160a01b90046001600160601b03169082018190528990612f1b904261500b565b10612f605780518686612f2d81614a88565b975081518110612f3f57612f3f614a72565b60200260200101906001600160a01b031690816001600160a01b0316815250505b83612f6a81614a88565b6000848152601b60205260409020600190559450505b612e72565b878514612fe55760405162461bcd60e51b815260206004820152602860248201527f4552433732314f7074696d697a65643a206469646e277420666f756e6420616c6044820152676c206f776e65727360c01b6064820152608401610c4c565b60005b85811015613027576130153388838151811061300657613006614a72565b60200260200101516001613609565b8061301f81614a88565b915050612fe8565b5087601a600082825461303a9190614994565b9091555050505050505050505050565b3361305d6000546001600160a01b031690565b6001600160a01b0316148061308157503360009081526002602052604090205460ff165b61309d5760405162461bcd60e51b8152600401610c4c906149ac565b60006130af6060830160408401614a0c565b6001600160801b0316116131195760405162461bcd60e51b815260206004820152602b60248201527f4552433732314f7074696d697a65643a20746865206d696e742063616e27742060448201526a626520666f72206672656560a81b6064820152608401610c4c565b61312660c0820182614a29565b905061313560a0830183614a29565b9050146131905760405162461bcd60e51b8152602060048201526024808201527f4552433732314f7074696d697a65643a2061727261792073697a65206d69736d6044820152630c2e8c6d60e31b6064820152608401610c4c565b60005b600f5481101561320c5760116000600c60030183815481106131b7576131b7614a72565b6000918252602080832060048304015460039092166008026101000a9091046001600160401b03168352820192909252604001902080546001600160801b03191690558061320481614a88565b915050613193565b5080600c61321a8282614ccf565b90505060005b61322d60a0830183614a29565b905081101561167e57606461324560c0840184614a29565b8381811061325557613255614a72565b905060200201602081019061326a9190614a0c565b6001600160801b0316106132cf5760405162461bcd60e51b815260206004820152602660248201527f4552433732314f7074696d697a65643a20646973636f756e742065786365656460448201526573203130302560d01b6064820152608401610c4c565b6132dc60c0830183614a29565b828181106132ec576132ec614a72565b90506020020160208101906133019190614a0c565b6011600061331260a0860186614a29565b8581811061332257613322614a72565b905060200201602081019061333791906146ed565b6001600160401b03168152602081019190915260400160002080546001600160801b0319166001600160801b03929092169190911790558061337881614a88565b915050613220565b606060056040516020016133949190615022565b604051602081830303815290604052905090565b6001600160a01b038083166000908152601d6020908152604080832093851683529290529081205415158061346857506013546001600160a01b031615801590613468575060135460405163c455279160e01b81526001600160a01b03858116600483015284811692169063c455279190602401602060405180830381865afa158015613439573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061345d9190614961565b6001600160a01b0316145b9392505050565b336134826000546001600160a01b031690565b6001600160a01b031614806134a657503360009081526002602052604090205460ff165b6134c25760405162461bcd60e51b8152600401610c4c906149ac565b8281146135115760405162461bcd60e51b815260206004820152601f60248201527f4552433732314f7074696d697a65643a206172726179206d69736d61746368006044820152606401610c4c565b60005b8381101561358c5782828281811061352e5761352e614a72565b905060200201356015600087878581811061354b5761354b614a72565b90506020020160208101906135609190614647565b6001600160a01b031681526020810191909152604001600020558061358481614a88565b915050613514565b5050505050565b61359b613ffa565b6001600160a01b0381166136005760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c4c565b61269181614054565b6001600160a01b0382166136715760405162461bcd60e51b815260206004820152602960248201527f4552433732314f7074696d697a65643a206d696e7420746f20746865207a65726044820152686f206164647265737360b81b6064820152608401610c4c565b612710816001600160801b031660145461368b9190614994565b11156136ff5760405162461bcd60e51b815260206004820152602e60248201527f4552433732314f7074696d697a65643a206d696e742065786365656473206d6160448201527f7820746f74616c20737570706c790000000000000000000000000000000000006064820152608401610c4c565b60145460005b826001600160801b031681101561381a576000828152601e60205260408082206001600160a01b038716600160a01b426001600160601b031602811790915590518492907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4613796856000868561377f81614a88565b965060405180602001604052806000815250613ea1565b6138085760405162461bcd60e51b815260206004820152603b60248201527f4552433732314f7074696d697a65643a207472616e7366657220746f206e6f6e60448201527f20455243373231526563656976657220696d706c656d656e74657200000000006064820152608401610c4c565b8061381281614a88565b915050613705565b50816001600160801b03166014546138329190614994565b811461388c5760405162461bcd60e51b8152602060048201526024808201527f4552433732314f7074696d697a65643a205265656e7472616e6379206465746560448201526318dd195960e21b6064820152608401610c4c565b60148190556001600160a01b0383166000908152601c6020526040812080548492906138c29084906001600160801b0316614ea1565b92506101000a8154816001600160801b0302191690836001600160801b0316021790555050505050565b6001600160a01b0383166139685760405162461bcd60e51b815260206004820152602f60248201527f4552433732314f7074696d697a65643a207472616e736665722066726f6d207460448201527f6865207a65726f206164647265737300000000000000000000000000000000006064820152608401610c4c565b6001600160a01b0382166139d45760405162461bcd60e51b815260206004820152602d60248201527f4552433732314f7074696d697a65643a207472616e7366657220746f2074686560448201526c207a65726f206164647265737360981b6064820152608401610c4c565b6014548110613a3c5760405162461bcd60e51b815260206004820152602e60248201527f4552433732314f7074696d697a65643a206e6f6e6578697374656e7420746f6b60448201526d32b724b21037b832b930ba34b7b760911b6064820152608401610c4c565b6000818152601e60205260409020546001600160a01b03848116911614613acb5760405162461bcd60e51b815260206004820152602e60248201527f4552433732314f7074696d697a65643a207472616e736665722066726f6d206960448201527f6e636f7272656374206f776e65720000000000000000000000000000000000006064820152608401610c4c565b836001600160a01b0316836001600160a01b03161480613b0457506000818152601f60205260409020546001600160a01b038581169116145b80613bc857506001600160a01b038084166000908152601d6020908152604080832093881683529290522054151580613bc857506013546001600160a01b031615801590613bc8575060135460405163c455279160e01b81526001600160a01b03858116600483015286811692169063c455279190602401602060405180830381865afa158015613b99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bbd9190614961565b6001600160a01b0316145b613c3a5760405162461bcd60e51b815260206004820152603a60248201527f4552433732314f7074696d697a65643a207472616e736665722063616c6c657260448201527f206973206e6f74206f776e6572206e6f7220617070726f7665640000000000006064820152608401610c4c565b816001600160a01b0316836001600160a01b031603613cb15760405162461bcd60e51b815260206004820152602d60248201527f4552433732314f7074696d697a65643a207472616e7366657220746f2074686560448201526c2073616d65206164647265737360981b6064820152608401610c4c565b600081815260208052604090205460ff161580613cd05750600d544210155b613d4e5760405162461bcd60e51b815260206004820152604360248201527f4552433732314f7074696d697a65643a207472616e73666572206f662074656160448201527f6d206d696e74656420746f6b656e207072696f7220746f207075626c6963206d6064820152621a5b9d60ea1b608482015260a401610c4c565b6000818152601f602052604080822080546001600160a01b0319169055518291906001600160a01b038616907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925908390a46001600160a01b0383166000908152601c60205260408120805460019290613dd19084906001600160801b0316614ecc565b82546101009290920a6001600160801b038181021990931691831602179091556001600160a01b0384166000908152601c602052604081208054600194509092613e1d91859116614ea1565b82546001600160801b039182166101009390930a9283029190920219909116179055506000818152601e60205260408082206001600160601b034216600160a01b026001600160a01b0380871691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a450505050565b60006001600160a01b0384163b15613fed57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290613ee5908990899088908890600401615046565b6020604051808303816000875af1925050508015613f20575060408051601f3d908101601f19168201909252613f1d91810190615082565b60015b613fd3573d808015613f4e576040519150601f19603f3d011682016040523d82523d6000602084013e613f53565b606091505b508051600003613fcb5760405162461bcd60e51b815260206004820152603b60248201527f4552433732314f7074696d697a65643a207472616e7366657220746f206e6f6e60448201527f20455243373231526563656976657220696d706c656d656e74657200000000006064820152608401610c4c565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050613ff1565b5060015b95945050505050565b6000546001600160a01b0316331461213e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c4c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0382166000908152600260205260409020805460ff19168215801591909117909155614109576040516001600160a01b038316907ffa6d6e0e6066ffafeb8530b0afbb780c04b0d3d5e2fc471faa21ba5b93eb862290600090a25050565b6040516001600160a01b038316907f95b8a85feae13d3ceffcaa5046474dd7c8672db6c5db535bc40ab057073c61f590600090a25050565b6060816000036141685750506040805180820190915260018152600360fc1b602082015290565b8160005b8115614192578061417c81614a88565b915061418b9050600a8361509f565b915061416c565b6000816001600160401b038111156141ac576141ac614abb565b6040519080825280601f01601f1916602001820160405280156141d6576020820181803683370190505b5090505b8415614259576141eb60018361500b565b91506141f8600a866150b3565b614203906030614994565b60f81b81838151811061421857614218614a72565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350614252600a8661509f565b94506141da565b949350505050565b6040516bffffffffffffffffffffffff193360601b16602082015260009081908390439042906034016040516020818303038152906040528051906020012060001c6142ad919061509f565b6040516bffffffffffffffffffffffff194160601b166020820152459042906034016040516020818303038152906040528051906020012060001c6142f2919061509f565b446142fd428a614994565b6143079190614994565b6143119190614994565b61431b9190614994565b6143259190614994565b61432f9190614994565b6143399190614994565b60405160200161434b91815260200190565b60408051601f198184030181529190528051602090910120601454909150614373818361509f565b61437d9190614ad1565b613468908261500b565b6001600160e01b03198116811461269157600080fd5b6000602082840312156143af57600080fd5b813561346881614387565b60005b838110156143d55781810151838201526020016143bd565b838111156118655750506000910152565b600081518084526143fe8160208601602086016143ba565b601f01601f19169290920160200192915050565b60208152600061346860208301846143e6565b60006020828403121561443757600080fd5b5035919050565b6001600160a01b038116811461269157600080fd5b6000806040838503121561446657600080fd5b82356144718161443e565b946020939093013593505050565b6001600160401b038116811461269157600080fd5b600080604083850312156144a757600080fd5b82356144b28161443e565b915060208301356144c28161447f565b809150509250929050565b6000806000606084860312156144e257600080fd5b83356144ed8161443e565b925060208401356144fd8161443e565b929592945050506040919091013590565b600081518084526020808501945080840160005b838110156145475781516001600160401b031687529582019590820190600101614522565b509495945050505050565b600081518084526020808501945080840160005b838110156145475781516001600160801b031687529582019590820190600101614566565b6020815260006001600160401b03808451166020840152806020850151166040840152506001600160801b03604084015116606083015260608301516080830152608083015160a083015260a083015160e060c08401526145f061010084018261450e565b905060c0840151601f198483030160e0850152613ff18282614552565b60006020828403121561461f57600080fd5b81356001600160401b0381111561463557600080fd5b820160e0818503121561346857600080fd5b60006020828403121561465957600080fd5b81356134688161443e565b60008083601f84011261467657600080fd5b5081356001600160401b0381111561468d57600080fd5b6020830191508360208285010111156146a557600080fd5b9250929050565b600080602083850312156146bf57600080fd5b82356001600160401b038111156146d557600080fd5b6146e185828601614664565b90969095509350505050565b6000602082840312156146ff57600080fd5b81356134688161447f565b6020808252825182820181905260009190848201906040850190845b8181101561474257835183529284019291840191600101614726565b50909695505050505050565b801515811461269157600080fd5b6000806040838503121561476f57600080fd5b823561477a8161443e565b915060208301356144c28161474e565b6000806000806000608086880312156147a257600080fd5b85356147ad8161443e565b945060208601356147bd8161443e565b93506040860135925060608601356001600160401b038111156147df57600080fd5b6147eb88828901614664565b969995985093965092949392505050565b6000806040838503121561480f57600080fd5b50508035926020909101359150565b60008083601f84011261483057600080fd5b5081356001600160401b0381111561484757600080fd5b6020830191508360208260051b85010111156146a557600080fd5b6000806000806040858703121561487857600080fd5b84356001600160401b038082111561488f57600080fd5b61489b8883890161481e565b909650945060208701359150808211156148b457600080fd5b506148c18782880161481e565b95989497509550505050565b6000806000606084860312156148e257600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561490c57600080fd5b82356149178161443e565b915060208301356144c28161443e565b600181811c9082168061493b57607f821691505b60208210810361495b57634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561497357600080fd5b81516134688161443e565b634e487b7160e01b600052601160045260246000fd5b600082198211156149a7576149a761497e565b500190565b6020808252602b908201527f5368617265644f776e61626c653a2063616c6c6572206973206e6f742061207360408201526a3430b932b21037bbb732b960a91b606082015260800190565b6001600160801b038116811461269157600080fd5b600060208284031215614a1e57600080fd5b8135613468816149f7565b6000808335601e19843603018112614a4057600080fd5b8301803591506001600160401b03821115614a5a57600080fd5b6020019150600581901b36038213156146a557600080fd5b634e487b7160e01b600052603260045260246000fd5b600060018201614a9a57614a9a61497e565b5060010190565b60008135610b4e8161447f565b60008135610b4e816149f7565b634e487b7160e01b600052604160045260246000fd5b6000816000190483118215151615614aeb57614aeb61497e565b500290565b5b8181101561167e5760008155600101614af1565b600160401b831115614b1957614b19614abb565b805483825580841015614b78578160005260206000206003850160021c810160188660031b168015614b6257614b6281600019840180546000198360200360031b1c1681555050565b50614b756003840160021c830182614af0565b50505b506000818152602081208391805b86811015614be557614bbd614b9a85614aa1565b84546001600160401b03600386901b81811b801990931693909116901b16178455565b6020840193506008820191506018821115614bdd57600091506001830192505b600101614b86565b50505050505050565b600160401b831115614c0257614c02614abb565b805483825580841015614c61578160005260206000206001850160011c810160108660041b168015614c4b57614c4b81600019840180546000198360200360031b1c1681555050565b50614c5e6001840160011c830182614af0565b50505b506000818152602081208391805b86811015614be557614ca6614c8385614aae565b84546001600160801b03600386901b81811b801990931693909116901b16178455565b6020840193506010808301925080831115614cc657600092506001840193505b50600101614c6f565b8135614cda8161447f565b6001600160401b03811690508154816001600160401b031982161783556020840135614d058161447f565b6fffffffffffffffff00000000000000008160401b16836001600160801b0319841617178455505050614d5d614d3d60408401614aae565b82546001600160801b031660809190911b6001600160801b031916178255565b6060820135600182015560808201356002820155614d7e60a0830183614a29565b614d8c818360038601614b05565b5050614d9b60c0830183614a29565b611865818360048601614bee565b601f8211156110b857806000526020600020601f840160051c81016020851015614dd05750805b61358c601f850160051c830182614af0565b6001600160401b03831115614df957614df9614abb565b614e0d83614e078354614927565b83614da9565b6000601f841160018114614e415760008515614e295750838201355b600019600387901b1c1916600186901b17835561358c565b600083815260209020601f19861690835b82811015614e725786850135825560209485019460019092019101614e52565b5086821015614e8f5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60006001600160801b03808316818516808303821115614ec357614ec361497e565b01949350505050565b60006001600160801b0383811690831681811015614eec57614eec61497e565b039392505050565b60006001600160801b0380831681851681830481118215151615614f1a57614f1a61497e565b02949350505050565b634e487b7160e01b600052601260045260246000fd5b60006001600160801b0380841680614f5357614f53614f23565b92169190910492915050565b600060208284031215614f7157600080fd5b81516134688161474e565b60008154614f8981614927565b60018281168015614fa15760018114614fb657614fe5565b60ff1984168752821515830287019450614fe5565b8560005260208060002060005b85811015614fdc5781548a820152908401908201614fc3565b50505082870194505b5050505092915050565b6000614ffb8285614f7c565b8351614ec38183602088016143ba565b60008282101561501d5761501d61497e565b500390565b600061502e8284614f7c565b6718dbdb9d1c9858dd60c21b81526008019392505050565b60006001600160a01b0380871683528086166020840152508360408301526080606083015261507860808301846143e6565b9695505050505050565b60006020828403121561509457600080fd5b815161346881614387565b6000826150ae576150ae614f23565b500490565b6000826150c2576150c2614f23565b50069056fea264697066735822122067136926e0db5d13ce3197c9143afd98b79caea8938fa74e4546b8a9e86eaf0864736f6c634300080f0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000003400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1000000000000000000000000000000000000000000000000000000000000004a68747470733a2f2f3571693333746f3636786f6536326c71656d6d666d61747076693079616d6e622e6c616d6264612d75726c2e75732d656173742d312e6f6e2e6177732f676f746d2f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022ba00000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000214e8348c4f00000000000000000000000000000000000000000000000000000000000062ed30700000000000000000000000000000000000000000000000000000000062ee81ef00000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000022ba00000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000214e8348c4f00000000000000000000000000000000000000000000000000000000000062ee81f00000000000000000000000000000000000000000000000000000000070dbd88000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : baseURI_ (string): https://5qi33to66xoe62lqemmfmatpvi0yamnb.lambda-url.us-east-1.on.aws/gotm/
Arg [1] : privateMintConfig_ (tuple): System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput]
Arg [2] : publicMintConfig_ (tuple): System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput]
Arg [3] : erc721FactoryAddress_ (address): 0x0000000000000000000000000000000000000000
Arg [4] : proxyRegistryAddress_ (address): 0xa5409ec958C83C3f309868babACA7c86DCB077c1

-----Encoded View---------------
35 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000340
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [4] : 000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1
Arg [5] : 000000000000000000000000000000000000000000000000000000000000004a
Arg [6] : 68747470733a2f2f3571693333746f3636786f6536326c71656d6d666d617470
Arg [7] : 76693079616d6e622e6c616d6264612d75726c2e75732d656173742d312e6f6e
Arg [8] : 2e6177732f676f746d2f00000000000000000000000000000000000000000000
Arg [9] : 00000000000000000000000000000000000000000000000000000000000022ba
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [11] : 0000000000000000000000000000000000000000000000000214e8348c4f0000
Arg [12] : 0000000000000000000000000000000000000000000000000000000062ed3070
Arg [13] : 0000000000000000000000000000000000000000000000000000000062ee81ef
Arg [14] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [15] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [16] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [17] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [18] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [19] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [20] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [21] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [22] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [23] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [24] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [25] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [26] : 00000000000000000000000000000000000000000000000000000000000022ba
Arg [27] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [28] : 0000000000000000000000000000000000000000000000000214e8348c4f0000
Arg [29] : 0000000000000000000000000000000000000000000000000000000062ee81f0
Arg [30] : 0000000000000000000000000000000000000000000000000000000070dbd880
Arg [31] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [32] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [33] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [34] : 0000000000000000000000000000000000000000000000000000000000000000


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.