ETH Price: $2,916.51 (-3.75%)
Gas: 1 Gwei

Token

Savage Wolves (SW)
 

Overview

Max Total Supply

224 SW

Holders

163

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 SW
0x0fe486ec52d929580655a2e479f85bb13cb0a72b
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
SavageWolves

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-01-13
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

interface IERC165 {
   
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

pragma solidity ^0.8.0;

interface IERC721 is IERC165 {

    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    function balanceOf(address owner) external view returns (uint256 balance);

    function ownerOf(uint256 tokenId) external view returns (address owner);

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function approve(address to, uint256 tokenId) external;

    function getApproved(uint256 tokenId) external view returns (address operator);

    function setApprovalForAll(address operator, bool _approved) external;

    function isApprovedForAll(address owner, address operator) external view returns (bool);

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

pragma solidity ^0.8.0;

interface IERC721Enumerable is IERC721 {

    function totalSupply() external view returns (uint256);

    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    function tokenByIndex(uint256 index) external view returns (uint256);
}

pragma solidity ^0.8.0;

abstract contract ERC165 is IERC165 {
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

pragma solidity ^0.8.0;

library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    function toString(uint256 value) internal pure returns (string memory) {
        
        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);
    }

    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);
    }

    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);
    }
}

pragma solidity ^0.8.0;

library Address {

    function isContract(address account) internal view returns (bool) {

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    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");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    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");
    }

    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);
    }

    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    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);
    }

    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    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);
    }

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
        
            if (returndata.length > 0) {

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

library SafeMath {
    
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a, "SafeMath: subtraction overflow");
        uint256 c = a - b;
        return c;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
       if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, "SafeMath: division by zero");
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0, "SafeMath: modulo by zero");
        return a % b;
    }
}

pragma solidity ^0.8.0;

interface IERC721Metadata is IERC721 {

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

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

    function tokenURI(uint256 tokenId) external view returns (string memory);
}

pragma solidity ^0.8.0;

interface IERC721Receiver {

    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

pragma solidity ^0.8.0;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

pragma solidity ^0.8.0;


contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    string private _name;

    string private _symbol;

    mapping(uint256 => address) private _owners;

    mapping(address => uint256) private _balances;

    mapping(uint256 => address) private _tokenApprovals;

    mapping(address => mapping(address => bool)) private _operatorApprovals;

    mapping(address=>mapping(uint256=>uint256)) userPerIdMintingTime;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }


    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }

    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }


    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }


    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);
    }

    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }

    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        _approve(address(0), tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        userPerIdMintingTime[from][tokenId] = 0;
        emit Transfer(from, to, tokenId);
    }

    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

pragma solidity ^0.8.0;

abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    mapping(uint256 => uint256) private _ownedTokensIndex;

    uint256[] private _allTokens;

    mapping(uint256 => uint256) private _allTokensIndex;

    function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {
        return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
    }

    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId;
            _ownedTokensIndex[lastTokenId] = tokenIndex;
        }

        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
       
        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId;
        _allTokensIndex[lastTokenId] = tokenIndex; 

        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}

pragma solidity ^0.8.0;

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor() {
        _setOwner(_msgSender());
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

interface Savage {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}



pragma solidity ^0.8.0;

contract SavageWolves is ERC721Enumerable, Ownable {

    Savage public savage;
    using Strings for uint256;
    using SafeMath for uint256;

    string public baseURI;
    string private baseExtension = ".json";

    bool public revealed = false;
    string public notRevealedUri;

    //mint cost
    uint256 public presaleCost = 0.08 ether;
    uint256 public publicCost = 0.08 ether;

    //max supply
    uint256 public presaleMaxSupply = 2000;
    uint256 public publicMaxSupply = 2000;

    //max mint
    uint256 public presaleMintLimit = 3;
    uint256 public publicMintLimit = 5;

    bool public isPresaleStart = false;
    bool public isPublicStart = false;

    mapping(address => bool) public isWhitelisted;
    mapping(address=>mapping(uint256=>bool)) private isMinter;

    mapping(address=>uint256) private mintedNFTs;
    uint256 private presaleMinted;
    uint256 private publicMinted;

    constructor(
        string memory _name,
        string memory _symbol,
        string memory _initBaseURI,
        string memory _initNotRevealedUri,
        Savage _savage
    ) ERC721(_name, _symbol) {
        setBaseURI(_initBaseURI);
        setNotRevealedURI(_initNotRevealedUri);
        savage = _savage;
    }

    

    function mint(uint256 _mintAmount) public payable {
        require(isPresaleStart == true || isPublicStart == true, "Neither of the sale is started yet!");
        uint256 supply = totalSupply();
        require(_mintAmount > 0, "need to mint at least 1 NFT");

        if(isPresaleStart == true){
            require(isWhitelisted[msg.sender]==true, "You're not whitelisted!");
            require(_mintAmount <= presaleMintLimit, "You can mint in range (1-3) NFT!");
            require(msg.value >= presaleCost.mul(_mintAmount), "insufficient funds");
            require(presaleMinted.add(_mintAmount) <= presaleMaxSupply, "max NFT presale limit exceeded");
            require(mintedNFTs[msg.sender].add(_mintAmount) <= presaleMintLimit, "You can mint max 3 NFTs!");
            for (uint8 i = 1; i <= _mintAmount; i++) {  
                _safeMint(msg.sender, supply + i);
                userPerIdMintingTime[msg.sender][supply + i] = block.timestamp;
                isMinter[msg.sender][supply+i] = true;
            }
            mintedNFTs[msg.sender]+=_mintAmount;
            presaleMinted += _mintAmount;
        }

        else if(isPublicStart == true){
            require(_mintAmount <= publicMintLimit, "You can mint in range (1-5) NFT!");
            require(msg.value >= publicCost.mul(_mintAmount), "insufficient funds");
            require(publicMinted.add(_mintAmount) <= publicMaxSupply, "max NFT presale limit exceeded");
            require(mintedNFTs[msg.sender].add(_mintAmount) <= publicMintLimit, "You can mint max 5 NFTs!");
            for (uint8 i = 1; i <= _mintAmount; i++) {  
                _safeMint(msg.sender, supply + i);
                userPerIdMintingTime[msg.sender][supply + i] = block.timestamp;
                isMinter[msg.sender][supply+i] = true;
            }
            mintedNFTs[msg.sender]+=_mintAmount;
            publicMinted += _mintAmount;
        }
        
    }


    function calculateTokens(address _user) public view returns(uint256){
        uint256 tokens;
        for(uint8 i=0; i < walletOfOwner(_user).length; i++){
            if(isMinter[_user][walletOfOwner(_user)[i]] == true && userPerIdMintingTime[_user][walletOfOwner(_user)[i]]>0){
                if(_user == ownerOf(walletOfOwner(_user)[i])){
                    tokens+=((block.timestamp - userPerIdMintingTime[_user][walletOfOwner(_user)[i]]).div(1 days)).mul(5);
                }
            } 
        }
       return tokens;
       
    }

    function calculateTokensId(address _user, uint256 _id) public view returns(uint256){
        uint256 tokens;
        if(_user == ownerOf(_id)){
            if(isMinter[_user][_id] == true && userPerIdMintingTime[_user][_id]>0){
            tokens+= ((block.timestamp - userPerIdMintingTime[_user][_id])/(1 days))*5;
            }
        }
        
        return tokens;
    }

    function claimTokens() public {
        require(calculateTokens(msg.sender) > 0,"You don't have tokens for reward!");
        uint256 tokens = calculateTokens(msg.sender)*10**18;
        savage.transfer(msg.sender,tokens);
        
        for(uint8 i=0; i < walletOfOwner(msg.sender).length; i++){
            userPerIdMintingTime[msg.sender][walletOfOwner(msg.sender)[i]] = block.timestamp; 
        }
    }

    function claimById(uint8 _tokenId) public{
        require(_exists(_tokenId), "ERC721Metadata: URI query for nonexistent token");
        require(ownerOf(_tokenId)==msg.sender,"You don't own this NFT!");
        require(calculateTokens(msg.sender) > 0,"You don't have tokens for reward!");
        uint256 tokensById = calculateTokensId(msg.sender, _tokenId)*10**18;
        savage.transfer(msg.sender,tokensById);
        userPerIdMintingTime[msg.sender][_tokenId] = block.timestamp;
    }

    // internal
    function _baseURI() internal view virtual override returns (string memory) {
        return baseURI;
    }

    //UTILITIES
    function setPresaleStatus(bool _state) public onlyOwner{
        isPresaleStart = _state;
    }

    function setPublicMintStatus(bool _state) public onlyOwner{
        isPublicStart = _state;
    }

    function setPresaleMaxSupply(uint256 _newSupply) public onlyOwner{
        presaleMaxSupply=_newSupply;
    }

    function setPublicMaxSupply(uint256 _newSupply) public onlyOwner{
        publicMaxSupply=_newSupply;
    }

    function setPresaleCost(uint256 _newCost) public onlyOwner{
        presaleCost=_newCost;
    }

    function setPublicCost(uint256 _newCost) public onlyOwner{
        publicCost=_newCost;
    }

    function addWhitelist(address[] memory _addresses) external onlyOwner {
        for(uint i = 0; i < _addresses.length; i++) {
        isWhitelisted[_addresses[i]] = true;
        }
    }

    function removeWhitelist(address[] memory _addresses) external onlyOwner {
            for(uint i = 0; i < _addresses.length; i++) {
            isWhitelisted[_addresses[i]] = false;
            }
    }

    function walletOfOwner(address _owner) public view returns (uint256[] memory) {
        uint256 ownerTokenCount = balanceOf(_owner);
        uint256[] memory tokenIds = new uint256[](ownerTokenCount);
        for (uint256 i; i < ownerTokenCount; i++) {
        tokenIds[i] = tokenOfOwnerByIndex(_owner, i);
        }
        return tokenIds;
    }

    function tokenURI(uint256 tokenId)
    public
    view
    virtual
    override
    returns (string memory){
        require(
        _exists(tokenId),
        "ERC721Metadata: URI query for nonexistent token"
        );
        
        if(revealed == false) {
            return notRevealedUri;
        }

        string memory currentBaseURI = _baseURI();
        return bytes(currentBaseURI).length > 0
            ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension))
            : "";
    }

    function reveal() public onlyOwner {
      revealed = true;
    }
    
    function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner {
        notRevealedUri = _notRevealedURI;
    }

    function setNftPerAddressLimit(uint256 _limit) public onlyOwner {
        publicMintLimit = _limit;
    }

    function setNftPresaleLimit(uint256 _limit) public onlyOwner {
        presaleMintLimit = _limit;
    }

    function setBaseURI(string memory _newBaseURI) public onlyOwner {
        baseURI = _newBaseURI;
    }
    
    function contractBalance() public view returns(uint256){
        return address(this).balance;
    }

    function withdraw(uint256 _amount) public payable onlyOwner {
        require(contractBalance() >= 0, "contract has no ethers!");
        require(_amount <= contractBalance(), "contract has not enough ethers!");
        require(_amount > 0, "Enter more than 0 amount!");
        uint256 balance = contractBalance();
        balance -= _amount;
        (bool os, ) = payable(owner()).call{value: _amount}("");
        require(os);
        
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","type":"string"},{"internalType":"contract Savage","name":"_savage","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"}],"name":"addWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"calculateTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"calculateTokensId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_tokenId","type":"uint8"}],"name":"claimById","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPresaleStart","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPublicStart","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleMaxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleMintLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicMaxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicMintLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"}],"name":"removeWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"savage","outputs":[{"internalType":"contract Savage","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setNftPerAddressLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setNftPresaleLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setPresaleCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newSupply","type":"uint256"}],"name":"setPresaleMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPresaleStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setPublicCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newSupply","type":"uint256"}],"name":"setPublicMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPublicMintStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","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":[],"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":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60c06040526005608081905264173539b7b760d91b60a09081526200002891600e91906200023a565b50600f805460ff1916905567011c37937e08000060118190556012556107d06013819055601455600360155560056016556017805461ffff191690553480156200007157600080fd5b5060405162003c1a38038062003c1a833981016040819052620000949162000397565b845185908590620000ad9060009060208501906200023a565b508051620000c39060019060208401906200023a565b505050620000e0620000da6200012160201b60201c565b62000125565b620000eb8362000177565b620000f682620001df565b600c80546001600160a01b0319166001600160a01b039290921691909117905550620004c792505050565b3390565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600b546001600160a01b03163314620001c65760405162461bcd60e51b8152602060048201819052602482015260008051602062003bfa83398151915260448201526064015b60405180910390fd5b8051620001db90600d9060208401906200023a565b5050565b600b546001600160a01b031633146200022a5760405162461bcd60e51b8152602060048201819052602482015260008051602062003bfa8339815191526044820152606401620001bd565b8051620001db9060109060208401905b828054620002489062000474565b90600052602060002090601f0160209004810192826200026c5760008555620002b7565b82601f106200028757805160ff1916838001178555620002b7565b82800160010185558215620002b7579182015b82811115620002b75782518255916020019190600101906200029a565b50620002c5929150620002c9565b5090565b5b80821115620002c55760008155600101620002ca565b600082601f830112620002f257600080fd5b81516001600160401b03808211156200030f576200030f620004b1565b604051601f8301601f19908116603f011681019082821181831017156200033a576200033a620004b1565b816040528381526020925086838588010111156200035757600080fd5b600091505b838210156200037b57858201830151818301840152908201906200035c565b838211156200038d5760008385830101525b9695505050505050565b600080600080600060a08688031215620003b057600080fd5b85516001600160401b0380821115620003c857600080fd5b620003d689838a01620002e0565b96506020880151915080821115620003ed57600080fd5b620003fb89838a01620002e0565b955060408801519150808211156200041257600080fd5b6200042089838a01620002e0565b945060608801519150808211156200043757600080fd5b506200044688828901620002e0565b608088015190935090506001600160a01b03811681146200046657600080fd5b809150509295509295909350565b600181811c908216806200048957607f821691505b60208210811415620004ab57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b61372380620004d76000396000f3fe60806040526004361061031a5760003560e01c8063715018a6116101ab578063a22cb465116100f7578063cde0490b11610095578063edac985b1161006f578063edac985b14610905578063f2c4ce1e14610925578063f2fde38b14610945578063f7ca59cb1461096557600080fd5b8063cde0490b1461087c578063d0eb26b01461089c578063e985e9c5146108bc57600080fd5b8063b61ff93c116100d1578063b61ff93c14610806578063b88d4fde14610826578063bb485b8814610846578063c87b56dd1461085c57600080fd5b8063a22cb465146107b1578063a475b5dd146107d1578063aa1b3869146107e657600080fd5b80638895283f116101645780638fdcf9421161013e5780638fdcf9421461074957806391b7ad061461076957806395d89b4114610789578063a0712d681461079e57600080fd5b80638895283f146106f85780638b7afe2e146107185780638da5cb5b1461072b57600080fd5b8063715018a61461066757806378cbcf231461067c5780637fe8dfe114610692578063802e5cb3146106ac578063811d2437146106c25780638693da20146106e257600080fd5b80632c99589b1161026a57806348c54b9d1161022357806355f804b3116101fd57806355f804b3146105f25780636352211e146106125780636c0360eb1461063257806370a082311461064757600080fd5b806348c54b9d146105a35780634f6ccce7146105b857806351830227146105d857600080fd5b80632c99589b146104d35780632e1a7d4d146104f35780632f745c59146105065780633af32abf1461052657806342842e0e14610556578063438b63001461057657600080fd5b8063095ea7b3116102d757806323245216116102b1578063232452161461045d57806323b872dd1461047d57806325e4c1e61461049d5780632a23d07d146104bd57600080fd5b8063095ea7b3146104065780630a403f041461042857806318160ddd1461044857600080fd5b806301ffc9a71461031f57806303da91dc1461035457806306fdde0314610373578063081812fc14610395578063081c8c44146103cd57806308fc299b146103e2575b600080fd5b34801561032b57600080fd5b5061033f61033a366004613167565b610985565b60405190151581526020015b60405180910390f35b34801561036057600080fd5b5060175461033f90610100900460ff1681565b34801561037f57600080fd5b506103886109b0565b60405161034b9190613397565b3480156103a157600080fd5b506103b56103b03660046131ea565b610a42565b6040516001600160a01b03909116815260200161034b565b3480156103d957600080fd5b50610388610adc565b3480156103ee57600080fd5b506103f860135481565b60405190815260200161034b565b34801561041257600080fd5b5061042661042136600461304f565b610b6a565b005b34801561043457600080fd5b506104266104433660046131ea565b610c80565b34801561045457600080fd5b506009546103f8565b34801561046957600080fd5b50610426610478366004613079565b610caf565b34801561048957600080fd5b50610426610498366004612f60565b610d45565b3480156104a957600080fd5b506103f86104b836600461304f565b610d76565b3480156104c957600080fd5b506103f860115481565b3480156104df57600080fd5b506104266104ee3660046131ea565b610e56565b6104266105013660046131ea565b610e85565b34801561051257600080fd5b506103f861052136600461304f565b610fcd565b34801561053257600080fd5b5061033f610541366004612f12565b60186020526000908152604090205460ff1681565b34801561056257600080fd5b50610426610571366004612f60565b611063565b34801561058257600080fd5b50610596610591366004612f12565b61107e565b60405161034b9190613353565b3480156105af57600080fd5b50610426611120565b3480156105c457600080fd5b506103f86105d33660046131ea565b611260565b3480156105e457600080fd5b50600f5461033f9060ff1681565b3480156105fe57600080fd5b5061042661060d3660046131a1565b6112f3565b34801561061e57600080fd5b506103b561062d3660046131ea565b611330565b34801561063e57600080fd5b506103886113a7565b34801561065357600080fd5b506103f8610662366004612f12565b6113b4565b34801561067357600080fd5b5061042661143b565b34801561068857600080fd5b506103f860145481565b34801561069e57600080fd5b5060175461033f9060ff1681565b3480156106b857600080fd5b506103f860155481565b3480156106ce57600080fd5b506104266106dd3660046131ea565b611471565b3480156106ee57600080fd5b506103f860125481565b34801561070457600080fd5b5061042661071336600461312d565b6114a0565b34801561072457600080fd5b50476103f8565b34801561073757600080fd5b50600b546001600160a01b03166103b5565b34801561075557600080fd5b506104266107643660046131ea565b6114dd565b34801561077557600080fd5b506103f8610784366004612f12565b61150c565b34801561079557600080fd5b506103886116ba565b6104266107ac3660046131ea565b6116c9565b3480156107bd57600080fd5b506104266107cc366004613018565b611cce565b3480156107dd57600080fd5b50610426611d93565b3480156107f257600080fd5b50600c546103b5906001600160a01b031681565b34801561081257600080fd5b5061042661082136600461312d565b611dcc565b34801561083257600080fd5b50610426610841366004612f9c565b611e10565b34801561085257600080fd5b506103f860165481565b34801561086857600080fd5b506103886108773660046131ea565b611e48565b34801561088857600080fd5b506104266108973660046131ea565b611f79565b3480156108a857600080fd5b506104266108b73660046131ea565b611fa8565b3480156108c857600080fd5b5061033f6108d7366004612f2d565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561091157600080fd5b50610426610920366004613079565b611fd7565b34801561093157600080fd5b506104266109403660046131a1565b612069565b34801561095157600080fd5b50610426610960366004612f12565b6120a6565b34801561097157600080fd5b50610426610980366004613203565b612141565b60006001600160e01b0319821663780e9d6360e01b14806109aa57506109aa826122ce565b92915050565b6060600080546109bf906135d1565b80601f01602080910402602001604051908101604052809291908181526020018280546109eb906135d1565b8015610a385780601f10610a0d57610100808354040283529160200191610a38565b820191906000526020600020905b815481529060010190602001808311610a1b57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610ac05760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60108054610ae9906135d1565b80601f0160208091040260200160405190810160405280929190818152602001828054610b15906135d1565b8015610b625780601f10610b3757610100808354040283529160200191610b62565b820191906000526020600020905b815481529060010190602001808311610b4557829003601f168201915b505050505081565b6000610b7582611330565b9050806001600160a01b0316836001600160a01b03161415610be35760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610ab7565b336001600160a01b0382161480610bff5750610bff81336108d7565b610c715760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610ab7565b610c7b838361231e565b505050565b600b546001600160a01b03163314610caa5760405162461bcd60e51b8152600401610ab79061343d565b601355565b600b546001600160a01b03163314610cd95760405162461bcd60e51b8152600401610ab79061343d565b60005b8151811015610d4157600060186000848481518110610cfd57610cfd61369d565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610d398161360c565b915050610cdc565b5050565b610d4f338261238c565b610d6b5760405162461bcd60e51b8152600401610ab7906134c1565b610c7b838383612483565b600080610d8283611330565b6001600160a01b0316846001600160a01b03161415610e4f576001600160a01b038416600090815260196020908152604080832086845290915290205460ff1615156001148015610df557506001600160a01b038416600090815260066020908152604080832086845290915290205415155b15610e4f576001600160a01b03841660009081526006602090815260408083208684529091529020546201518090610e2d904261358e565b610e37919061355b565b610e4290600561356f565b610e4c9082613543565b90505b9392505050565b600b546001600160a01b03163314610e805760405162461bcd60e51b8152600401610ab79061343d565b601455565b600b546001600160a01b03163314610eaf5760405162461bcd60e51b8152600401610ab79061343d565b47811115610eff5760405162461bcd60e51b815260206004820152601f60248201527f636f6e747261637420686173206e6f7420656e6f7567682065746865727321006044820152606401610ab7565b60008111610f4f5760405162461bcd60e51b815260206004820152601960248201527f456e746572206d6f7265207468616e203020616d6f756e7421000000000000006044820152606401610ab7565b47610f5a828261358e565b90506000610f70600b546001600160a01b031690565b6001600160a01b03168360405160006040518083038185875af1925050503d8060008114610fba576040519150601f19603f3d011682016040523d82523d6000602084013e610fbf565b606091505b5050905080610c7b57600080fd5b6000610fd8836113b4565b821061103a5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610ab7565b506001600160a01b03919091166000908152600760209081526040808320938352929052205490565b610c7b83838360405180602001604052806000815250611e10565b6060600061108b836113b4565b905060008167ffffffffffffffff8111156110a8576110a86136b3565b6040519080825280602002602001820160405280156110d1578160200160208202803683370190505b50905060005b82811015611118576110e98582610fcd565b8282815181106110fb576110fb61369d565b6020908102919091010152806111108161360c565b9150506110d7565b509392505050565b600061112b3361150c565b116111485760405162461bcd60e51b8152600401610ab7906133fc565b60006111533361150c565b61116590670de0b6b3a764000061356f565b600c5460405163a9059cbb60e01b8152336004820152602481018390529192506001600160a01b03169063a9059cbb90604401602060405180830381600087803b1580156111b257600080fd5b505af11580156111c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ea919061314a565b5060005b6111f73361107e565b518160ff161015610d4157336000818152600660205260408120429290919061121f9061107e565b8460ff16815181106112335761123361369d565b6020026020010151815260200190815260200160002081905550808061125890613627565b9150506111ee565b600061126b60095490565b82106112ce5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610ab7565b600982815481106112e1576112e161369d565b90600052602060002001549050919050565b600b546001600160a01b0316331461131d5760405162461bcd60e51b8152600401610ab79061343d565b8051610d4190600d906020840190612e05565b6000818152600260205260408120546001600160a01b0316806109aa5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610ab7565b600d8054610ae9906135d1565b60006001600160a01b03821661141f5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610ab7565b506001600160a01b031660009081526003602052604090205490565b600b546001600160a01b031633146114655760405162461bcd60e51b8152600401610ab79061343d565b61146f6000612648565b565b600b546001600160a01b0316331461149b5760405162461bcd60e51b8152600401610ab79061343d565b601255565b600b546001600160a01b031633146114ca5760405162461bcd60e51b8152600401610ab79061343d565b6017805460ff1916911515919091179055565b600b546001600160a01b031633146115075760405162461bcd60e51b8152600401610ab79061343d565b601155565b60008060005b61151b8461107e565b518160ff1610156116b3576001600160a01b0384166000908152601960205260408120906115488661107e565b8360ff168151811061155c5761155c61369d565b60209081029190910181015182528101919091526040016000205460ff16151560011480156115d557506001600160a01b0384166000908152600660205260408120816115a88761107e565b8460ff16815181106115bc576115bc61369d565b6020026020010151815260200190815260200160002054115b156116a1576116076115e68561107e565b8260ff16815181106115fa576115fa61369d565b6020026020010151611330565b6001600160a01b0316846001600160a01b031614156116a1576001600160a01b03841660009081526006602052604081206116949160059161168e916201518091906116528a61107e565b8760ff16815181106116665761166661369d565b602002602001015181526020019081526020016000205442611688919061358e565b9061269a565b906126f7565b61169e9083613543565b91505b806116ab81613627565b915050611512565b5092915050565b6060600180546109bf906135d1565b60175460ff161515600114806116ec575060175460ff6101009091041615156001145b6117445760405162461bcd60e51b815260206004820152602360248201527f4e656974686572206f66207468652073616c652069732073746172746564207960448201526265742160e81b6064820152608401610ab7565b600061174f60095490565b9050600082116117a15760405162461bcd60e51b815260206004820152601b60248201527f6e65656420746f206d696e74206174206c656173742031204e465400000000006044820152606401610ab7565b60175460ff16151560011415611a6a573360009081526018602052604090205460ff1615156001146118155760405162461bcd60e51b815260206004820152601760248201527f596f75277265206e6f742077686974656c6973746564210000000000000000006044820152606401610ab7565b6015548211156118675760405162461bcd60e51b815260206004820181905260248201527f596f752063616e206d696e7420696e2072616e67652028312d3329204e4654216044820152606401610ab7565b60115461187490836126f7565b3410156118b85760405162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b6044820152606401610ab7565b601354601b546118c89084612776565b11156119165760405162461bcd60e51b815260206004820152601e60248201527f6d6178204e46542070726573616c65206c696d697420657863656564656400006044820152606401610ab7565b601554336000908152601a60205260409020546119339084612776565b11156119815760405162461bcd60e51b815260206004820152601860248201527f596f752063616e206d696e74206d61782033204e4654732100000000000000006044820152606401610ab7565b60015b828160ff1611611a26576119a43361199f60ff841685613543565b6127d5565b33600090815260066020526040812042916119c260ff851686613543565b81526020808201929092526040908101600090812093909355338352601990915281206001916119f560ff851686613543565b81526020810191909152604001600020805460ff191691151591909117905580611a1e81613627565b915050611984565b50336000908152601a602052604081208054849290611a46908490613543565b9250508190555081601b6000828254611a5f9190613543565b90915550610d419050565b60175460ff61010090910416151560011415610d4157601654821115611ad25760405162461bcd60e51b815260206004820181905260248201527f596f752063616e206d696e7420696e2072616e67652028312d3529204e4654216044820152606401610ab7565b601254611adf90836126f7565b341015611b235760405162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b6044820152606401610ab7565b601454601c54611b339084612776565b1115611b815760405162461bcd60e51b815260206004820152601e60248201527f6d6178204e46542070726573616c65206c696d697420657863656564656400006044820152606401610ab7565b601654336000908152601a6020526040902054611b9e9084612776565b1115611bec5760405162461bcd60e51b815260206004820152601860248201527f596f752063616e206d696e74206d61782035204e4654732100000000000000006044820152606401610ab7565b60015b828160ff1611611c8c57611c0a3361199f60ff841685613543565b3360009081526006602052604081204291611c2860ff851686613543565b8152602080820192909252604090810160009081209390935533835260199091528120600191611c5b60ff851686613543565b81526020810191909152604001600020805460ff191691151591909117905580611c8481613627565b915050611bef565b50336000908152601a602052604081208054849290611cac908490613543565b9250508190555081601c6000828254611cc59190613543565b90915550505050565b6001600160a01b038216331415611d275760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610ab7565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600b546001600160a01b03163314611dbd5760405162461bcd60e51b8152600401610ab79061343d565b600f805460ff19166001179055565b600b546001600160a01b03163314611df65760405162461bcd60e51b8152600401610ab79061343d565b601780549115156101000261ff0019909216919091179055565b611e1a338361238c565b611e365760405162461bcd60e51b8152600401610ab7906134c1565b611e42848484846127ef565b50505050565b6000818152600260205260409020546060906001600160a01b0316611e7f5760405162461bcd60e51b8152600401610ab790613472565b600f5460ff16611f1b5760108054611e96906135d1565b80601f0160208091040260200160405190810160405280929190818152602001828054611ec2906135d1565b8015611f0f5780601f10611ee457610100808354040283529160200191611f0f565b820191906000526020600020905b815481529060010190602001808311611ef257829003601f168201915b50505050509050919050565b6000611f25612822565b90506000815111611f455760405180602001604052806000815250610e4f565b80611f4f84612831565b600e604051602001611f6393929190613252565b6040516020818303038152906040529392505050565b600b546001600160a01b03163314611fa35760405162461bcd60e51b8152600401610ab79061343d565b601555565b600b546001600160a01b03163314611fd25760405162461bcd60e51b8152600401610ab79061343d565b601655565b600b546001600160a01b031633146120015760405162461bcd60e51b8152600401610ab79061343d565b60005b8151811015610d41576001601860008484815181106120255761202561369d565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806120618161360c565b915050612004565b600b546001600160a01b031633146120935760405162461bcd60e51b8152600401610ab79061343d565b8051610d41906010906020840190612e05565b600b546001600160a01b031633146120d05760405162461bcd60e51b8152600401610ab79061343d565b6001600160a01b0381166121355760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ab7565b61213e81612648565b50565b60ff81166000908152600260205260409020546001600160a01b03166121795760405162461bcd60e51b8152600401610ab790613472565b3361218660ff8316611330565b6001600160a01b0316146121dc5760405162461bcd60e51b815260206004820152601760248201527f596f7520646f6e2774206f776e2074686973204e4654210000000000000000006044820152606401610ab7565b60006121e73361150c565b116122045760405162461bcd60e51b8152600401610ab7906133fc565b6000612213338360ff16610d76565b61222590670de0b6b3a764000061356f565b600c5460405163a9059cbb60e01b8152336004820152602481018390529192506001600160a01b03169063a9059cbb90604401602060405180830381600087803b15801561227257600080fd5b505af1158015612286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122aa919061314a565b505033600090815260066020908152604080832060ff909416835292905220429055565b60006001600160e01b031982166380ac58cd60e01b14806122ff57506001600160e01b03198216635b5e139f60e01b145b806109aa57506301ffc9a760e01b6001600160e01b03198316146109aa565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061235382611330565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166124055760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610ab7565b600061241083611330565b9050806001600160a01b0316846001600160a01b0316148061244b5750836001600160a01b031661244084610a42565b6001600160a01b0316145b8061247b57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661249682611330565b6001600160a01b0316146124fe5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610ab7565b6001600160a01b0382166125605760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610ab7565b61256b83838361292f565b61257660008261231e565b6001600160a01b038316600090815260036020526040812080546001929061259f90849061358e565b90915550506001600160a01b03821660009081526003602052604081208054600192906125cd908490613543565b9091555050600081815260026020908152604080832080546001600160a01b0319166001600160a01b0387811691821790925590871680855260068452828520868652909352818420849055905184939192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008082116126eb5760405162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f0000000000006044820152606401610ab7565b6000610e4c838561355b565b600082612706575060006109aa565b6000612712838561356f565b90508261271f858361355b565b14610e4f5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610ab7565b6000806127838385613543565b905083811015610e4f5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610ab7565b610d418282604051806020016040528060008152506129e7565b6127fa848484612483565b61280684848484612a1a565b611e425760405162461bcd60e51b8152600401610ab7906133aa565b6060600d80546109bf906135d1565b6060816128555750506040805180820190915260018152600360fc1b602082015290565b8160005b811561287f57806128698161360c565b91506128789050600a8361355b565b9150612859565b60008167ffffffffffffffff81111561289a5761289a6136b3565b6040519080825280601f01601f1916602001820160405280156128c4576020820181803683370190505b5090505b841561247b576128d960018361358e565b91506128e6600a86613647565b6128f1906030613543565b60f81b8183815181106129065761290661369d565b60200101906001600160f81b031916908160001a905350612928600a8661355b565b94506128c8565b6001600160a01b03831661298a5761298581600980546000838152600a60205260408120829055600182018355919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0155565b6129ad565b816001600160a01b0316836001600160a01b0316146129ad576129ad8382612b27565b6001600160a01b0382166129c457610c7b81612bc4565b826001600160a01b0316826001600160a01b031614610c7b57610c7b8282612c73565b6129f18383612cb7565b6129fe6000848484612a1a565b610c7b5760405162461bcd60e51b8152600401610ab7906133aa565b60006001600160a01b0384163b15612b1c57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612a5e903390899088908890600401613316565b602060405180830381600087803b158015612a7857600080fd5b505af1925050508015612aa8575060408051601f3d908101601f19168201909252612aa591810190613184565b60015b612b02573d808015612ad6576040519150601f19603f3d011682016040523d82523d6000602084013e612adb565b606091505b508051612afa5760405162461bcd60e51b8152600401610ab7906133aa565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061247b565b506001949350505050565b60006001612b34846113b4565b612b3e919061358e565b600083815260086020526040902054909150808214612b91576001600160a01b03841660009081526007602090815260408083208584528252808320548484528184208190558352600890915290208190555b5060009182526008602090815260408084208490556001600160a01b039094168352600781528383209183525290812055565b600954600090612bd69060019061358e565b6000838152600a602052604081205460098054939450909284908110612bfe57612bfe61369d565b906000526020600020015490508060098381548110612c1f57612c1f61369d565b6000918252602080832090910192909255828152600a90915260408082208490558582528120556009805480612c5757612c57613687565b6001900381819060005260206000200160009055905550505050565b6000612c7e836113b4565b6001600160a01b039093166000908152600760209081526040808320868452825280832085905593825260089052919091209190915550565b6001600160a01b038216612d0d5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610ab7565b6000818152600260205260409020546001600160a01b031615612d725760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610ab7565b612d7e6000838361292f565b6001600160a01b0382166000908152600360205260408120805460019290612da7908490613543565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054612e11906135d1565b90600052602060002090601f016020900481019282612e335760008555612e79565b82601f10612e4c57805160ff1916838001178555612e79565b82800160010185558215612e79579182015b82811115612e79578251825591602001919060010190612e5e565b50612e85929150612e89565b5090565b5b80821115612e855760008155600101612e8a565b600067ffffffffffffffff831115612eb857612eb86136b3565b612ecb601f8401601f1916602001613512565b9050828152838383011115612edf57600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b0381168114612f0d57600080fd5b919050565b600060208284031215612f2457600080fd5b610e4f82612ef6565b60008060408385031215612f4057600080fd5b612f4983612ef6565b9150612f5760208401612ef6565b90509250929050565b600080600060608486031215612f7557600080fd5b612f7e84612ef6565b9250612f8c60208501612ef6565b9150604084013590509250925092565b60008060008060808587031215612fb257600080fd5b612fbb85612ef6565b9350612fc960208601612ef6565b925060408501359150606085013567ffffffffffffffff811115612fec57600080fd5b8501601f81018713612ffd57600080fd5b61300c87823560208401612e9e565b91505092959194509250565b6000806040838503121561302b57600080fd5b61303483612ef6565b91506020830135613044816136c9565b809150509250929050565b6000806040838503121561306257600080fd5b61306b83612ef6565b946020939093013593505050565b6000602080838503121561308c57600080fd5b823567ffffffffffffffff808211156130a457600080fd5b818501915085601f8301126130b857600080fd5b8135818111156130ca576130ca6136b3565b8060051b91506130db848301613512565b8181528481019084860184860187018a10156130f657600080fd5b600095505b838610156131205761310c81612ef6565b8352600195909501949186019186016130fb565b5098975050505050505050565b60006020828403121561313f57600080fd5b8135610e4f816136c9565b60006020828403121561315c57600080fd5b8151610e4f816136c9565b60006020828403121561317957600080fd5b8135610e4f816136d7565b60006020828403121561319657600080fd5b8151610e4f816136d7565b6000602082840312156131b357600080fd5b813567ffffffffffffffff8111156131ca57600080fd5b8201601f810184136131db57600080fd5b61247b84823560208401612e9e565b6000602082840312156131fc57600080fd5b5035919050565b60006020828403121561321557600080fd5b813560ff81168114610e4f57600080fd5b6000815180845261323e8160208601602086016135a5565b601f01601f19169290920160200192915050565b6000845160206132658285838a016135a5565b8551918401916132788184848a016135a5565b8554920191600090600181811c908083168061329557607f831692505b8583108114156132b357634e487b7160e01b85526022600452602485fd5b8080156132c757600181146132d857613305565b60ff19851688528388019550613305565b60008b81526020902060005b858110156132fd5781548a8201529084019088016132e4565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061334990830184613226565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561338b5783518352928401929184019160010161336f565b50909695505050505050565b602081526000610e4f6020830184613226565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526021908201527f596f7520646f6e2774206861766520746f6b656e7320666f72207265776172646040820152602160f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561353b5761353b6136b3565b604052919050565b600082198211156135565761355661365b565b500190565b60008261356a5761356a613671565b500490565b60008160001904831182151516156135895761358961365b565b500290565b6000828210156135a0576135a061365b565b500390565b60005b838110156135c05781810151838201526020016135a8565b83811115611e425750506000910152565b600181811c908216806135e557607f821691505b6020821081141561360657634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156136205761362061365b565b5060010190565b600060ff821660ff81141561363e5761363e61365b565b60010192915050565b60008261365657613656613671565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b801515811461213e57600080fd5b6001600160e01b03198116811461213e57600080fdfea2646970667358221220b39ee47a7bf28c82fb2bb6c9ee6b65073a253fff77a99a697fb4f2849dc93e1664736f6c634300080700334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657200000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000018000000000000000000000000047d6e07fa845cc87e69637dba302ec594d5fb5a5000000000000000000000000000000000000000000000000000000000000000d53617661676520576f6c76657300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000253570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d625746666276477855436d434d416639737a4c626e335557617a535361374d6179446d68425831556e524c482f000000000000000000000000000000000000000000000000000000000000000000000000000000000041697066733a2f2f516d6132426e7177684a5976324b6a4843443142544b5768376666665a4370614357746638614c434248327162412f68696464656e2e6a736f6e00000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061031a5760003560e01c8063715018a6116101ab578063a22cb465116100f7578063cde0490b11610095578063edac985b1161006f578063edac985b14610905578063f2c4ce1e14610925578063f2fde38b14610945578063f7ca59cb1461096557600080fd5b8063cde0490b1461087c578063d0eb26b01461089c578063e985e9c5146108bc57600080fd5b8063b61ff93c116100d1578063b61ff93c14610806578063b88d4fde14610826578063bb485b8814610846578063c87b56dd1461085c57600080fd5b8063a22cb465146107b1578063a475b5dd146107d1578063aa1b3869146107e657600080fd5b80638895283f116101645780638fdcf9421161013e5780638fdcf9421461074957806391b7ad061461076957806395d89b4114610789578063a0712d681461079e57600080fd5b80638895283f146106f85780638b7afe2e146107185780638da5cb5b1461072b57600080fd5b8063715018a61461066757806378cbcf231461067c5780637fe8dfe114610692578063802e5cb3146106ac578063811d2437146106c25780638693da20146106e257600080fd5b80632c99589b1161026a57806348c54b9d1161022357806355f804b3116101fd57806355f804b3146105f25780636352211e146106125780636c0360eb1461063257806370a082311461064757600080fd5b806348c54b9d146105a35780634f6ccce7146105b857806351830227146105d857600080fd5b80632c99589b146104d35780632e1a7d4d146104f35780632f745c59146105065780633af32abf1461052657806342842e0e14610556578063438b63001461057657600080fd5b8063095ea7b3116102d757806323245216116102b1578063232452161461045d57806323b872dd1461047d57806325e4c1e61461049d5780632a23d07d146104bd57600080fd5b8063095ea7b3146104065780630a403f041461042857806318160ddd1461044857600080fd5b806301ffc9a71461031f57806303da91dc1461035457806306fdde0314610373578063081812fc14610395578063081c8c44146103cd57806308fc299b146103e2575b600080fd5b34801561032b57600080fd5b5061033f61033a366004613167565b610985565b60405190151581526020015b60405180910390f35b34801561036057600080fd5b5060175461033f90610100900460ff1681565b34801561037f57600080fd5b506103886109b0565b60405161034b9190613397565b3480156103a157600080fd5b506103b56103b03660046131ea565b610a42565b6040516001600160a01b03909116815260200161034b565b3480156103d957600080fd5b50610388610adc565b3480156103ee57600080fd5b506103f860135481565b60405190815260200161034b565b34801561041257600080fd5b5061042661042136600461304f565b610b6a565b005b34801561043457600080fd5b506104266104433660046131ea565b610c80565b34801561045457600080fd5b506009546103f8565b34801561046957600080fd5b50610426610478366004613079565b610caf565b34801561048957600080fd5b50610426610498366004612f60565b610d45565b3480156104a957600080fd5b506103f86104b836600461304f565b610d76565b3480156104c957600080fd5b506103f860115481565b3480156104df57600080fd5b506104266104ee3660046131ea565b610e56565b6104266105013660046131ea565b610e85565b34801561051257600080fd5b506103f861052136600461304f565b610fcd565b34801561053257600080fd5b5061033f610541366004612f12565b60186020526000908152604090205460ff1681565b34801561056257600080fd5b50610426610571366004612f60565b611063565b34801561058257600080fd5b50610596610591366004612f12565b61107e565b60405161034b9190613353565b3480156105af57600080fd5b50610426611120565b3480156105c457600080fd5b506103f86105d33660046131ea565b611260565b3480156105e457600080fd5b50600f5461033f9060ff1681565b3480156105fe57600080fd5b5061042661060d3660046131a1565b6112f3565b34801561061e57600080fd5b506103b561062d3660046131ea565b611330565b34801561063e57600080fd5b506103886113a7565b34801561065357600080fd5b506103f8610662366004612f12565b6113b4565b34801561067357600080fd5b5061042661143b565b34801561068857600080fd5b506103f860145481565b34801561069e57600080fd5b5060175461033f9060ff1681565b3480156106b857600080fd5b506103f860155481565b3480156106ce57600080fd5b506104266106dd3660046131ea565b611471565b3480156106ee57600080fd5b506103f860125481565b34801561070457600080fd5b5061042661071336600461312d565b6114a0565b34801561072457600080fd5b50476103f8565b34801561073757600080fd5b50600b546001600160a01b03166103b5565b34801561075557600080fd5b506104266107643660046131ea565b6114dd565b34801561077557600080fd5b506103f8610784366004612f12565b61150c565b34801561079557600080fd5b506103886116ba565b6104266107ac3660046131ea565b6116c9565b3480156107bd57600080fd5b506104266107cc366004613018565b611cce565b3480156107dd57600080fd5b50610426611d93565b3480156107f257600080fd5b50600c546103b5906001600160a01b031681565b34801561081257600080fd5b5061042661082136600461312d565b611dcc565b34801561083257600080fd5b50610426610841366004612f9c565b611e10565b34801561085257600080fd5b506103f860165481565b34801561086857600080fd5b506103886108773660046131ea565b611e48565b34801561088857600080fd5b506104266108973660046131ea565b611f79565b3480156108a857600080fd5b506104266108b73660046131ea565b611fa8565b3480156108c857600080fd5b5061033f6108d7366004612f2d565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561091157600080fd5b50610426610920366004613079565b611fd7565b34801561093157600080fd5b506104266109403660046131a1565b612069565b34801561095157600080fd5b50610426610960366004612f12565b6120a6565b34801561097157600080fd5b50610426610980366004613203565b612141565b60006001600160e01b0319821663780e9d6360e01b14806109aa57506109aa826122ce565b92915050565b6060600080546109bf906135d1565b80601f01602080910402602001604051908101604052809291908181526020018280546109eb906135d1565b8015610a385780601f10610a0d57610100808354040283529160200191610a38565b820191906000526020600020905b815481529060010190602001808311610a1b57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610ac05760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60108054610ae9906135d1565b80601f0160208091040260200160405190810160405280929190818152602001828054610b15906135d1565b8015610b625780601f10610b3757610100808354040283529160200191610b62565b820191906000526020600020905b815481529060010190602001808311610b4557829003601f168201915b505050505081565b6000610b7582611330565b9050806001600160a01b0316836001600160a01b03161415610be35760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610ab7565b336001600160a01b0382161480610bff5750610bff81336108d7565b610c715760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610ab7565b610c7b838361231e565b505050565b600b546001600160a01b03163314610caa5760405162461bcd60e51b8152600401610ab79061343d565b601355565b600b546001600160a01b03163314610cd95760405162461bcd60e51b8152600401610ab79061343d565b60005b8151811015610d4157600060186000848481518110610cfd57610cfd61369d565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610d398161360c565b915050610cdc565b5050565b610d4f338261238c565b610d6b5760405162461bcd60e51b8152600401610ab7906134c1565b610c7b838383612483565b600080610d8283611330565b6001600160a01b0316846001600160a01b03161415610e4f576001600160a01b038416600090815260196020908152604080832086845290915290205460ff1615156001148015610df557506001600160a01b038416600090815260066020908152604080832086845290915290205415155b15610e4f576001600160a01b03841660009081526006602090815260408083208684529091529020546201518090610e2d904261358e565b610e37919061355b565b610e4290600561356f565b610e4c9082613543565b90505b9392505050565b600b546001600160a01b03163314610e805760405162461bcd60e51b8152600401610ab79061343d565b601455565b600b546001600160a01b03163314610eaf5760405162461bcd60e51b8152600401610ab79061343d565b47811115610eff5760405162461bcd60e51b815260206004820152601f60248201527f636f6e747261637420686173206e6f7420656e6f7567682065746865727321006044820152606401610ab7565b60008111610f4f5760405162461bcd60e51b815260206004820152601960248201527f456e746572206d6f7265207468616e203020616d6f756e7421000000000000006044820152606401610ab7565b47610f5a828261358e565b90506000610f70600b546001600160a01b031690565b6001600160a01b03168360405160006040518083038185875af1925050503d8060008114610fba576040519150601f19603f3d011682016040523d82523d6000602084013e610fbf565b606091505b5050905080610c7b57600080fd5b6000610fd8836113b4565b821061103a5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610ab7565b506001600160a01b03919091166000908152600760209081526040808320938352929052205490565b610c7b83838360405180602001604052806000815250611e10565b6060600061108b836113b4565b905060008167ffffffffffffffff8111156110a8576110a86136b3565b6040519080825280602002602001820160405280156110d1578160200160208202803683370190505b50905060005b82811015611118576110e98582610fcd565b8282815181106110fb576110fb61369d565b6020908102919091010152806111108161360c565b9150506110d7565b509392505050565b600061112b3361150c565b116111485760405162461bcd60e51b8152600401610ab7906133fc565b60006111533361150c565b61116590670de0b6b3a764000061356f565b600c5460405163a9059cbb60e01b8152336004820152602481018390529192506001600160a01b03169063a9059cbb90604401602060405180830381600087803b1580156111b257600080fd5b505af11580156111c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ea919061314a565b5060005b6111f73361107e565b518160ff161015610d4157336000818152600660205260408120429290919061121f9061107e565b8460ff16815181106112335761123361369d565b6020026020010151815260200190815260200160002081905550808061125890613627565b9150506111ee565b600061126b60095490565b82106112ce5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610ab7565b600982815481106112e1576112e161369d565b90600052602060002001549050919050565b600b546001600160a01b0316331461131d5760405162461bcd60e51b8152600401610ab79061343d565b8051610d4190600d906020840190612e05565b6000818152600260205260408120546001600160a01b0316806109aa5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610ab7565b600d8054610ae9906135d1565b60006001600160a01b03821661141f5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610ab7565b506001600160a01b031660009081526003602052604090205490565b600b546001600160a01b031633146114655760405162461bcd60e51b8152600401610ab79061343d565b61146f6000612648565b565b600b546001600160a01b0316331461149b5760405162461bcd60e51b8152600401610ab79061343d565b601255565b600b546001600160a01b031633146114ca5760405162461bcd60e51b8152600401610ab79061343d565b6017805460ff1916911515919091179055565b600b546001600160a01b031633146115075760405162461bcd60e51b8152600401610ab79061343d565b601155565b60008060005b61151b8461107e565b518160ff1610156116b3576001600160a01b0384166000908152601960205260408120906115488661107e565b8360ff168151811061155c5761155c61369d565b60209081029190910181015182528101919091526040016000205460ff16151560011480156115d557506001600160a01b0384166000908152600660205260408120816115a88761107e565b8460ff16815181106115bc576115bc61369d565b6020026020010151815260200190815260200160002054115b156116a1576116076115e68561107e565b8260ff16815181106115fa576115fa61369d565b6020026020010151611330565b6001600160a01b0316846001600160a01b031614156116a1576001600160a01b03841660009081526006602052604081206116949160059161168e916201518091906116528a61107e565b8760ff16815181106116665761166661369d565b602002602001015181526020019081526020016000205442611688919061358e565b9061269a565b906126f7565b61169e9083613543565b91505b806116ab81613627565b915050611512565b5092915050565b6060600180546109bf906135d1565b60175460ff161515600114806116ec575060175460ff6101009091041615156001145b6117445760405162461bcd60e51b815260206004820152602360248201527f4e656974686572206f66207468652073616c652069732073746172746564207960448201526265742160e81b6064820152608401610ab7565b600061174f60095490565b9050600082116117a15760405162461bcd60e51b815260206004820152601b60248201527f6e65656420746f206d696e74206174206c656173742031204e465400000000006044820152606401610ab7565b60175460ff16151560011415611a6a573360009081526018602052604090205460ff1615156001146118155760405162461bcd60e51b815260206004820152601760248201527f596f75277265206e6f742077686974656c6973746564210000000000000000006044820152606401610ab7565b6015548211156118675760405162461bcd60e51b815260206004820181905260248201527f596f752063616e206d696e7420696e2072616e67652028312d3329204e4654216044820152606401610ab7565b60115461187490836126f7565b3410156118b85760405162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b6044820152606401610ab7565b601354601b546118c89084612776565b11156119165760405162461bcd60e51b815260206004820152601e60248201527f6d6178204e46542070726573616c65206c696d697420657863656564656400006044820152606401610ab7565b601554336000908152601a60205260409020546119339084612776565b11156119815760405162461bcd60e51b815260206004820152601860248201527f596f752063616e206d696e74206d61782033204e4654732100000000000000006044820152606401610ab7565b60015b828160ff1611611a26576119a43361199f60ff841685613543565b6127d5565b33600090815260066020526040812042916119c260ff851686613543565b81526020808201929092526040908101600090812093909355338352601990915281206001916119f560ff851686613543565b81526020810191909152604001600020805460ff191691151591909117905580611a1e81613627565b915050611984565b50336000908152601a602052604081208054849290611a46908490613543565b9250508190555081601b6000828254611a5f9190613543565b90915550610d419050565b60175460ff61010090910416151560011415610d4157601654821115611ad25760405162461bcd60e51b815260206004820181905260248201527f596f752063616e206d696e7420696e2072616e67652028312d3529204e4654216044820152606401610ab7565b601254611adf90836126f7565b341015611b235760405162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b6044820152606401610ab7565b601454601c54611b339084612776565b1115611b815760405162461bcd60e51b815260206004820152601e60248201527f6d6178204e46542070726573616c65206c696d697420657863656564656400006044820152606401610ab7565b601654336000908152601a6020526040902054611b9e9084612776565b1115611bec5760405162461bcd60e51b815260206004820152601860248201527f596f752063616e206d696e74206d61782035204e4654732100000000000000006044820152606401610ab7565b60015b828160ff1611611c8c57611c0a3361199f60ff841685613543565b3360009081526006602052604081204291611c2860ff851686613543565b8152602080820192909252604090810160009081209390935533835260199091528120600191611c5b60ff851686613543565b81526020810191909152604001600020805460ff191691151591909117905580611c8481613627565b915050611bef565b50336000908152601a602052604081208054849290611cac908490613543565b9250508190555081601c6000828254611cc59190613543565b90915550505050565b6001600160a01b038216331415611d275760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610ab7565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600b546001600160a01b03163314611dbd5760405162461bcd60e51b8152600401610ab79061343d565b600f805460ff19166001179055565b600b546001600160a01b03163314611df65760405162461bcd60e51b8152600401610ab79061343d565b601780549115156101000261ff0019909216919091179055565b611e1a338361238c565b611e365760405162461bcd60e51b8152600401610ab7906134c1565b611e42848484846127ef565b50505050565b6000818152600260205260409020546060906001600160a01b0316611e7f5760405162461bcd60e51b8152600401610ab790613472565b600f5460ff16611f1b5760108054611e96906135d1565b80601f0160208091040260200160405190810160405280929190818152602001828054611ec2906135d1565b8015611f0f5780601f10611ee457610100808354040283529160200191611f0f565b820191906000526020600020905b815481529060010190602001808311611ef257829003601f168201915b50505050509050919050565b6000611f25612822565b90506000815111611f455760405180602001604052806000815250610e4f565b80611f4f84612831565b600e604051602001611f6393929190613252565b6040516020818303038152906040529392505050565b600b546001600160a01b03163314611fa35760405162461bcd60e51b8152600401610ab79061343d565b601555565b600b546001600160a01b03163314611fd25760405162461bcd60e51b8152600401610ab79061343d565b601655565b600b546001600160a01b031633146120015760405162461bcd60e51b8152600401610ab79061343d565b60005b8151811015610d41576001601860008484815181106120255761202561369d565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806120618161360c565b915050612004565b600b546001600160a01b031633146120935760405162461bcd60e51b8152600401610ab79061343d565b8051610d41906010906020840190612e05565b600b546001600160a01b031633146120d05760405162461bcd60e51b8152600401610ab79061343d565b6001600160a01b0381166121355760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ab7565b61213e81612648565b50565b60ff81166000908152600260205260409020546001600160a01b03166121795760405162461bcd60e51b8152600401610ab790613472565b3361218660ff8316611330565b6001600160a01b0316146121dc5760405162461bcd60e51b815260206004820152601760248201527f596f7520646f6e2774206f776e2074686973204e4654210000000000000000006044820152606401610ab7565b60006121e73361150c565b116122045760405162461bcd60e51b8152600401610ab7906133fc565b6000612213338360ff16610d76565b61222590670de0b6b3a764000061356f565b600c5460405163a9059cbb60e01b8152336004820152602481018390529192506001600160a01b03169063a9059cbb90604401602060405180830381600087803b15801561227257600080fd5b505af1158015612286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122aa919061314a565b505033600090815260066020908152604080832060ff909416835292905220429055565b60006001600160e01b031982166380ac58cd60e01b14806122ff57506001600160e01b03198216635b5e139f60e01b145b806109aa57506301ffc9a760e01b6001600160e01b03198316146109aa565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061235382611330565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166124055760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610ab7565b600061241083611330565b9050806001600160a01b0316846001600160a01b0316148061244b5750836001600160a01b031661244084610a42565b6001600160a01b0316145b8061247b57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661249682611330565b6001600160a01b0316146124fe5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610ab7565b6001600160a01b0382166125605760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610ab7565b61256b83838361292f565b61257660008261231e565b6001600160a01b038316600090815260036020526040812080546001929061259f90849061358e565b90915550506001600160a01b03821660009081526003602052604081208054600192906125cd908490613543565b9091555050600081815260026020908152604080832080546001600160a01b0319166001600160a01b0387811691821790925590871680855260068452828520868652909352818420849055905184939192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008082116126eb5760405162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f0000000000006044820152606401610ab7565b6000610e4c838561355b565b600082612706575060006109aa565b6000612712838561356f565b90508261271f858361355b565b14610e4f5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610ab7565b6000806127838385613543565b905083811015610e4f5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610ab7565b610d418282604051806020016040528060008152506129e7565b6127fa848484612483565b61280684848484612a1a565b611e425760405162461bcd60e51b8152600401610ab7906133aa565b6060600d80546109bf906135d1565b6060816128555750506040805180820190915260018152600360fc1b602082015290565b8160005b811561287f57806128698161360c565b91506128789050600a8361355b565b9150612859565b60008167ffffffffffffffff81111561289a5761289a6136b3565b6040519080825280601f01601f1916602001820160405280156128c4576020820181803683370190505b5090505b841561247b576128d960018361358e565b91506128e6600a86613647565b6128f1906030613543565b60f81b8183815181106129065761290661369d565b60200101906001600160f81b031916908160001a905350612928600a8661355b565b94506128c8565b6001600160a01b03831661298a5761298581600980546000838152600a60205260408120829055600182018355919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0155565b6129ad565b816001600160a01b0316836001600160a01b0316146129ad576129ad8382612b27565b6001600160a01b0382166129c457610c7b81612bc4565b826001600160a01b0316826001600160a01b031614610c7b57610c7b8282612c73565b6129f18383612cb7565b6129fe6000848484612a1a565b610c7b5760405162461bcd60e51b8152600401610ab7906133aa565b60006001600160a01b0384163b15612b1c57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612a5e903390899088908890600401613316565b602060405180830381600087803b158015612a7857600080fd5b505af1925050508015612aa8575060408051601f3d908101601f19168201909252612aa591810190613184565b60015b612b02573d808015612ad6576040519150601f19603f3d011682016040523d82523d6000602084013e612adb565b606091505b508051612afa5760405162461bcd60e51b8152600401610ab7906133aa565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061247b565b506001949350505050565b60006001612b34846113b4565b612b3e919061358e565b600083815260086020526040902054909150808214612b91576001600160a01b03841660009081526007602090815260408083208584528252808320548484528184208190558352600890915290208190555b5060009182526008602090815260408084208490556001600160a01b039094168352600781528383209183525290812055565b600954600090612bd69060019061358e565b6000838152600a602052604081205460098054939450909284908110612bfe57612bfe61369d565b906000526020600020015490508060098381548110612c1f57612c1f61369d565b6000918252602080832090910192909255828152600a90915260408082208490558582528120556009805480612c5757612c57613687565b6001900381819060005260206000200160009055905550505050565b6000612c7e836113b4565b6001600160a01b039093166000908152600760209081526040808320868452825280832085905593825260089052919091209190915550565b6001600160a01b038216612d0d5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610ab7565b6000818152600260205260409020546001600160a01b031615612d725760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610ab7565b612d7e6000838361292f565b6001600160a01b0382166000908152600360205260408120805460019290612da7908490613543565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054612e11906135d1565b90600052602060002090601f016020900481019282612e335760008555612e79565b82601f10612e4c57805160ff1916838001178555612e79565b82800160010185558215612e79579182015b82811115612e79578251825591602001919060010190612e5e565b50612e85929150612e89565b5090565b5b80821115612e855760008155600101612e8a565b600067ffffffffffffffff831115612eb857612eb86136b3565b612ecb601f8401601f1916602001613512565b9050828152838383011115612edf57600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b0381168114612f0d57600080fd5b919050565b600060208284031215612f2457600080fd5b610e4f82612ef6565b60008060408385031215612f4057600080fd5b612f4983612ef6565b9150612f5760208401612ef6565b90509250929050565b600080600060608486031215612f7557600080fd5b612f7e84612ef6565b9250612f8c60208501612ef6565b9150604084013590509250925092565b60008060008060808587031215612fb257600080fd5b612fbb85612ef6565b9350612fc960208601612ef6565b925060408501359150606085013567ffffffffffffffff811115612fec57600080fd5b8501601f81018713612ffd57600080fd5b61300c87823560208401612e9e565b91505092959194509250565b6000806040838503121561302b57600080fd5b61303483612ef6565b91506020830135613044816136c9565b809150509250929050565b6000806040838503121561306257600080fd5b61306b83612ef6565b946020939093013593505050565b6000602080838503121561308c57600080fd5b823567ffffffffffffffff808211156130a457600080fd5b818501915085601f8301126130b857600080fd5b8135818111156130ca576130ca6136b3565b8060051b91506130db848301613512565b8181528481019084860184860187018a10156130f657600080fd5b600095505b838610156131205761310c81612ef6565b8352600195909501949186019186016130fb565b5098975050505050505050565b60006020828403121561313f57600080fd5b8135610e4f816136c9565b60006020828403121561315c57600080fd5b8151610e4f816136c9565b60006020828403121561317957600080fd5b8135610e4f816136d7565b60006020828403121561319657600080fd5b8151610e4f816136d7565b6000602082840312156131b357600080fd5b813567ffffffffffffffff8111156131ca57600080fd5b8201601f810184136131db57600080fd5b61247b84823560208401612e9e565b6000602082840312156131fc57600080fd5b5035919050565b60006020828403121561321557600080fd5b813560ff81168114610e4f57600080fd5b6000815180845261323e8160208601602086016135a5565b601f01601f19169290920160200192915050565b6000845160206132658285838a016135a5565b8551918401916132788184848a016135a5565b8554920191600090600181811c908083168061329557607f831692505b8583108114156132b357634e487b7160e01b85526022600452602485fd5b8080156132c757600181146132d857613305565b60ff19851688528388019550613305565b60008b81526020902060005b858110156132fd5781548a8201529084019088016132e4565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061334990830184613226565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561338b5783518352928401929184019160010161336f565b50909695505050505050565b602081526000610e4f6020830184613226565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526021908201527f596f7520646f6e2774206861766520746f6b656e7320666f72207265776172646040820152602160f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561353b5761353b6136b3565b604052919050565b600082198211156135565761355661365b565b500190565b60008261356a5761356a613671565b500490565b60008160001904831182151516156135895761358961365b565b500290565b6000828210156135a0576135a061365b565b500390565b60005b838110156135c05781810151838201526020016135a8565b83811115611e425750506000910152565b600181811c908216806135e557607f821691505b6020821081141561360657634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156136205761362061365b565b5060010190565b600060ff821660ff81141561363e5761363e61365b565b60010192915050565b60008261365657613656613671565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b801515811461213e57600080fd5b6001600160e01b03198116811461213e57600080fdfea2646970667358221220b39ee47a7bf28c82fb2bb6c9ee6b65073a253fff77a99a697fb4f2849dc93e1664736f6c63430008070033

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

00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000018000000000000000000000000047d6e07fa845cc87e69637dba302ec594d5fb5a5000000000000000000000000000000000000000000000000000000000000000d53617661676520576f6c76657300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000253570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d625746666276477855436d434d416639737a4c626e335557617a535361374d6179446d68425831556e524c482f000000000000000000000000000000000000000000000000000000000000000000000000000000000041697066733a2f2f516d6132426e7177684a5976324b6a4843443142544b5768376666665a4370614357746638614c434248327162412f68696464656e2e6a736f6e00000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Savage Wolves
Arg [1] : _symbol (string): SW
Arg [2] : _initBaseURI (string): ipfs://QmbWFfbvGxUCmCMAf9szLbn3UWazSSa7MayDmhBX1UnRLH/
Arg [3] : _initNotRevealedUri (string): ipfs://Qma2BnqwhJYv2KjHCD1BTKWh7fffZCpaCWtf8aLCBH2qbA/hidden.json
Arg [4] : _savage (address): 0x47D6E07fA845CC87E69637DbA302ec594D5fb5A5

-----Encoded View---------------
16 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [4] : 00000000000000000000000047d6e07fa845cc87e69637dba302ec594d5fb5a5
Arg [5] : 000000000000000000000000000000000000000000000000000000000000000d
Arg [6] : 53617661676520576f6c76657300000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [8] : 5357000000000000000000000000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [10] : 697066733a2f2f516d625746666276477855436d434d416639737a4c626e3355
Arg [11] : 57617a535361374d6179446d68425831556e524c482f00000000000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000041
Arg [13] : 697066733a2f2f516d6132426e7177684a5976324b6a4843443142544b576837
Arg [14] : 6666665a4370614357746638614c434248327162412f68696464656e2e6a736f
Arg [15] : 6e00000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

21587:8403:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17043:224;;;;;;;;;;-1:-1:-1;17043:224:0;;;;;:::i;:::-;;:::i;:::-;;;9310:14:1;;9303:22;9285:41;;9273:2;9258:18;17043:224:0;;;;;;;;22249:33;;;;;;;;;;-1:-1:-1;22249:33:0;;;;;;;;;;;10382:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;11465:221::-;;;;;;;;;;-1:-1:-1;11465:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;7692:32:1;;;7674:51;;7662:2;7647:18;11465:221:0;7528:203:1;21851:28:0;;;;;;;;;;;;;:::i;22016:38::-;;;;;;;;;;;;;;;;;;;23316:25:1;;;23304:2;23289:18;22016:38:0;23170:177:1;11046:411:0;;;;;;;;;;-1:-1:-1;11046:411:0;;;;;:::i;:::-;;:::i;:::-;;27102:111;;;;;;;;;;-1:-1:-1;27102:111:0;;;;;:::i;:::-;;:::i;17539:113::-;;;;;;;;;;-1:-1:-1;17627:10:0;:17;17539:113;;27744:206;;;;;;;;;;-1:-1:-1;27744:206:0;;;;;:::i;:::-;;:::i;12169:296::-;;;;;;;;;;-1:-1:-1;12169:296:0;;;;;:::i;:::-;;:::i;25416:386::-;;;;;;;;;;-1:-1:-1;25416:386:0;;;;;:::i;:::-;;:::i;21905:39::-;;;;;;;;;;;;;;;;27221:109;;;;;;;;;;-1:-1:-1;27221:109:0;;;;;:::i;:::-;;:::i;29534:453::-;;;;;;:::i;:::-;;:::i;17275:256::-;;;;;;;;;;-1:-1:-1;17275:256:0;;;;;:::i;:::-;;:::i;22291:45::-;;;;;;;;;;-1:-1:-1;22291:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;12473:185;;;;;;;;;;-1:-1:-1;12473:185:0;;;;;:::i;:::-;;:::i;27958:354::-;;;;;;;;;;-1:-1:-1;27958:354:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;25810:417::-;;;;;;;;;;;;;:::i;17660:233::-;;;;;;;;;;-1:-1:-1;17660:233:0;;;;;:::i;:::-;;:::i;21816:28::-;;;;;;;;;;-1:-1:-1;21816:28:0;;;;;;;;29308:104;;;;;;;;;;-1:-1:-1;29308:104:0;;;;;:::i;:::-;;:::i;10135:239::-;;;;;;;;;;-1:-1:-1;10135:239:0;;;;;:::i;:::-;;:::i;21741:21::-;;;;;;;;;;;;;:::i;9919:208::-;;;;;;;;;;-1:-1:-1;9919:208:0;;;;;:::i;:::-;;:::i;20397:94::-;;;;;;;;;;;;;:::i;22061:37::-;;;;;;;;;;;;;;;;22208:34;;;;;;;;;;-1:-1:-1;22208:34:0;;;;;;;;22123:35;;;;;;;;;;;;;;;;27443:95;;;;;;;;;;-1:-1:-1;27443:95:0;;;;;:::i;:::-;;:::i;21951:38::-;;;;;;;;;;;;;;;;26890:97;;;;;;;;;;-1:-1:-1;26890:97:0;;;;;:::i;:::-;;:::i;29424:102::-;;;;;;;;;;-1:-1:-1;29497:21:0;29424:102;;20174:87;;;;;;;;;;-1:-1:-1;20247:6:0;;-1:-1:-1;;;;;20247:6:0;20174:87;;27338:97;;;;;;;;;;-1:-1:-1;27338:97:0;;;;;:::i;:::-;;:::i;24853:555::-;;;;;;;;;;-1:-1:-1;24853:555:0;;;;;:::i;:::-;;:::i;10490:104::-;;;;;;;;;;;;;:::i;22878:1965::-;;;;;;:::i;:::-;;:::i;11694:295::-;;;;;;;;;;-1:-1:-1;11694:295:0;;;;;:::i;:::-;;:::i;28867:67::-;;;;;;;;;;;;;:::i;21647:20::-;;;;;;;;;;-1:-1:-1;21647:20:0;;;;-1:-1:-1;;;;;21647:20:0;;;26995:99;;;;;;;;;;-1:-1:-1;26995:99:0;;;;;:::i;:::-;;:::i;12666:328::-;;;;;;;;;;-1:-1:-1;12666:328:0;;;;;:::i;:::-;;:::i;22165:34::-;;;;;;;;;;;;;;;;28320:539;;;;;;;;;;-1:-1:-1;28320:539:0;;;;;:::i;:::-;;:::i;29195:105::-;;;;;;;;;;-1:-1:-1;29195:105:0;;;;;:::i;:::-;;:::i;29080:107::-;;;;;;;;;;-1:-1:-1;29080:107:0;;;;;:::i;:::-;;:::i;11997:164::-;;;;;;;;;;-1:-1:-1;11997:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;12118:25:0;;;12094:4;12118:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;11997:164;27546:190;;;;;;;;;;-1:-1:-1;27546:190:0;;;;;:::i;:::-;;:::i;28946:126::-;;;;;;;;;;-1:-1:-1;28946:126:0;;;;;:::i;:::-;;:::i;20499:192::-;;;;;;;;;;-1:-1:-1;20499:192:0;;;;;:::i;:::-;;:::i;26235:497::-;;;;;;;;;;-1:-1:-1;26235:497:0;;;;;:::i;:::-;;:::i;17043:224::-;17145:4;-1:-1:-1;;;;;;17169:50:0;;-1:-1:-1;;;17169:50:0;;:90;;;17223:36;17247:11;17223:23;:36::i;:::-;17162:97;17043:224;-1:-1:-1;;17043:224:0:o;10382:100::-;10436:13;10469:5;10462:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10382:100;:::o;11465:221::-;11541:7;13418:16;;;:7;:16;;;;;;-1:-1:-1;;;;;13418:16:0;11561:73;;;;-1:-1:-1;;;11561:73:0;;17294:2:1;11561:73:0;;;17276:21:1;17333:2;17313:18;;;17306:30;17372:34;17352:18;;;17345:62;-1:-1:-1;;;17423:18:1;;;17416:42;17475:19;;11561:73:0;;;;;;;;;-1:-1:-1;11654:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;11654:24:0;;11465:221::o;21851:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11046:411::-;11127:13;11143:23;11158:7;11143:14;:23::i;:::-;11127:39;;11191:5;-1:-1:-1;;;;;11185:11:0;:2;-1:-1:-1;;;;;11185:11:0;;;11177:57;;;;-1:-1:-1;;;11177:57:0;;19614:2:1;11177:57:0;;;19596:21:1;19653:2;19633:18;;;19626:30;19692:34;19672:18;;;19665:62;-1:-1:-1;;;19743:18:1;;;19736:31;19784:19;;11177:57:0;19412:397:1;11177:57:0;8804:10;-1:-1:-1;;;;;11269:21:0;;;;:62;;-1:-1:-1;11294:37:0;11311:5;8804:10;11997:164;:::i;11294:37::-;11247:168;;;;-1:-1:-1;;;11247:168:0;;14883:2:1;11247:168:0;;;14865:21:1;14922:2;14902:18;;;14895:30;14961:34;14941:18;;;14934:62;15032:26;15012:18;;;15005:54;15076:19;;11247:168:0;14681:420:1;11247:168:0;11428:21;11437:2;11441:7;11428:8;:21::i;:::-;11116:341;11046:411;;:::o;27102:111::-;20247:6;;-1:-1:-1;;;;;20247:6:0;8804:10;20309:23;20301:68;;;;-1:-1:-1;;;20301:68:0;;;;;;;:::i;:::-;27178:16:::1;:27:::0;27102:111::o;27744:206::-;20247:6;;-1:-1:-1;;;;;20247:6:0;8804:10;20309:23;20301:68;;;;-1:-1:-1;;;20301:68:0;;;;;;;:::i;:::-;27836:6:::1;27832:111;27852:10;:17;27848:1;:21;27832:111;;;27922:5;27891:13;:28;27905:10;27916:1;27905:13;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;27891:28:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;27891:28:0;:36;;-1:-1:-1;;27891:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27871:3;::::1;::::0;::::1;:::i;:::-;;;;27832:111;;;;27744:206:::0;:::o;12169:296::-;12321:41;8804:10;12354:7;12321:18;:41::i;:::-;12313:103;;;;-1:-1:-1;;;12313:103:0;;;;;;;:::i;:::-;12429:28;12439:4;12445:2;12449:7;12429:9;:28::i;25416:386::-;25491:7;25510:14;25547:12;25555:3;25547:7;:12::i;:::-;-1:-1:-1;;;;;25538:21:0;:5;-1:-1:-1;;;;;25538:21:0;;25535:226;;;-1:-1:-1;;;;;25578:15:0;;;;;;:8;:15;;;;;;;;:20;;;;;;;;;;;:28;;:20;:28;:66;;;;-1:-1:-1;;;;;;25610:27:0;;25643:1;25610:27;;;:20;:27;;;;;;;;:32;;;;;;;;;:34;;25578:66;25575:175;;;-1:-1:-1;;;;;25689:27:0;;;;;;:20;:27;;;;;;;;:32;;;;;;;;;25724:6;;25671:50;;:15;:50;:::i;:::-;25670:61;;;;:::i;:::-;25669:65;;25733:1;25669:65;:::i;:::-;25660:74;;;;:::i;:::-;;;25575:175;25788:6;25416:386;-1:-1:-1;;;25416:386:0:o;27221:109::-;20247:6;;-1:-1:-1;;;;;20247:6:0;8804:10;20309:23;20301:68;;;;-1:-1:-1;;;20301:68:0;;;;;;;:::i;:::-;27296:15:::1;:26:::0;27221:109::o;29534:453::-;20247:6;;-1:-1:-1;;;;;20247:6:0;8804:10;20309:23;20301:68;;;;-1:-1:-1;;;20301:68:0;;;;;;;:::i;:::-;29497:21;29682:7:::1;:28;;29674:72;;;::::0;-1:-1:-1;;;29674:72:0;;20016:2:1;29674:72:0::1;::::0;::::1;19998:21:1::0;20055:2;20035:18;;;20028:30;20094:33;20074:18;;;20067:61;20145:18;;29674:72:0::1;19814:355:1::0;29674:72:0::1;29775:1;29765:7;:11;29757:49;;;::::0;-1:-1:-1;;;29757:49:0;;21141:2:1;29757:49:0::1;::::0;::::1;21123:21:1::0;21180:2;21160:18;;;21153:30;21219:27;21199:18;;;21192:55;21264:18;;29757:49:0::1;20939:349:1::0;29757:49:0::1;29497:21:::0;29863:18:::1;29874:7:::0;29497:21;29863:18:::1;:::i;:::-;;;29893:7;29914;20247:6:::0;;-1:-1:-1;;;;;20247:6:0;;20174:87;29914:7:::1;-1:-1:-1::0;;;;;29906:21:0::1;29935:7;29906:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29892:55;;;29966:2;29958:11;;;::::0;::::1;17275:256:::0;17372:7;17408:23;17425:5;17408:16;:23::i;:::-;17400:5;:31;17392:87;;;;-1:-1:-1;;;17392:87:0;;10338:2:1;17392:87:0;;;10320:21:1;10377:2;10357:18;;;10350:30;10416:34;10396:18;;;10389:62;-1:-1:-1;;;10467:18:1;;;10460:41;10518:19;;17392:87:0;10136:407:1;17392:87:0;-1:-1:-1;;;;;;17497:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;17275:256::o;12473:185::-;12611:39;12628:4;12634:2;12638:7;12611:39;;;;;;;;;;;;:16;:39::i;27958:354::-;28018:16;28047:23;28073:17;28083:6;28073:9;:17::i;:::-;28047:43;;28101:25;28143:15;28129:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28129:30:0;;28101:58;;28175:9;28170:109;28190:15;28186:1;:19;28170:109;;;28237:30;28257:6;28265:1;28237:19;:30::i;:::-;28223:8;28232:1;28223:11;;;;;;;;:::i;:::-;;;;;;;;;;:44;28207:3;;;;:::i;:::-;;;;28170:109;;;-1:-1:-1;28296:8:0;27958:354;-1:-1:-1;;;27958:354:0:o;25810:417::-;25889:1;25859:27;25875:10;25859:15;:27::i;:::-;:31;25851:76;;;;-1:-1:-1;;;25851:76:0;;;;;;;:::i;:::-;25938:14;25955:27;25971:10;25955:15;:27::i;:::-;:34;;25983:6;25955:34;:::i;:::-;26000:6;;:34;;-1:-1:-1;;;26000:34:0;;26016:10;26000:34;;;8403:51:1;8470:18;;;8463:34;;;25938:51:0;;-1:-1:-1;;;;;;26000:6:0;;:15;;8376:18:1;;26000:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26059:7;26055:165;26074:25;26088:10;26074:13;:25::i;:::-;:32;26070:1;:36;;;26055:165;;;26148:10;26127:32;;;;:20;:32;;;;;26192:15;;26127:32;;;26160:25;;:13;:25::i;:::-;26186:1;26160:28;;;;;;;;;;:::i;:::-;;;;;;;26127:62;;;;;;;;;;;:80;;;;26108:3;;;;;:::i;:::-;;;;26055:165;;17660:233;17735:7;17771:30;17627:10;:17;;17539:113;17771:30;17763:5;:38;17755:95;;;;-1:-1:-1;;;17755:95:0;;21495:2:1;17755:95:0;;;21477:21:1;21534:2;21514:18;;;21507:30;21573:34;21553:18;;;21546:62;-1:-1:-1;;;21624:18:1;;;21617:42;21676:19;;17755:95:0;21293:408:1;17755:95:0;17868:10;17879:5;17868:17;;;;;;;;:::i;:::-;;;;;;;;;17861:24;;17660:233;;;:::o;29308:104::-;20247:6;;-1:-1:-1;;;;;20247:6:0;8804:10;20309:23;20301:68;;;;-1:-1:-1;;;20301:68:0;;;;;;;:::i;:::-;29383:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;10135:239::-:0;10207:7;10243:16;;;:7;:16;;;;;;-1:-1:-1;;;;;10243:16:0;10278:19;10270:73;;;;-1:-1:-1;;;10270:73:0;;16121:2:1;10270:73:0;;;16103:21:1;16160:2;16140:18;;;16133:30;16199:34;16179:18;;;16172:62;-1:-1:-1;;;16250:18:1;;;16243:39;16299:19;;10270:73:0;15919:405:1;21741:21:0;;;;;;;:::i;9919:208::-;9991:7;-1:-1:-1;;;;;10019:19:0;;10011:74;;;;-1:-1:-1;;;10011:74:0;;15710:2:1;10011:74:0;;;15692:21:1;15749:2;15729:18;;;15722:30;15788:34;15768:18;;;15761:62;-1:-1:-1;;;15839:18:1;;;15832:40;15889:19;;10011:74:0;15508:406:1;10011:74:0;-1:-1:-1;;;;;;10103:16:0;;;;;:9;:16;;;;;;;9919:208::o;20397:94::-;20247:6;;-1:-1:-1;;;;;20247:6:0;8804:10;20309:23;20301:68;;;;-1:-1:-1;;;20301:68:0;;;;;;;:::i;:::-;20462:21:::1;20480:1;20462:9;:21::i;:::-;20397:94::o:0;27443:95::-;20247:6;;-1:-1:-1;;;;;20247:6:0;8804:10;20309:23;20301:68;;;;-1:-1:-1;;;20301:68:0;;;;;;;:::i;:::-;27511:10:::1;:19:::0;27443:95::o;26890:97::-;20247:6;;-1:-1:-1;;;;;20247:6:0;8804:10;20309:23;20301:68;;;;-1:-1:-1;;;20301:68:0;;;;;;;:::i;:::-;26956:14:::1;:23:::0;;-1:-1:-1;;26956:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26890:97::o;27338:::-;20247:6;;-1:-1:-1;;;;;20247:6:0;8804:10;20309:23;20301:68;;;;-1:-1:-1;;;20301:68:0;;;;;;;:::i;:::-;27407:11:::1;:20:::0;27338:97::o;24853:555::-;24913:7;24932:14;24961:7;24957:412;24976:20;24990:5;24976:13;:20::i;:::-;:27;24972:1;:31;;;24957:412;;;-1:-1:-1;;;;;25027:15:0;;;;;;:8;:15;;;;;;25043:20;25036:5;25043:13;:20::i;:::-;25064:1;25043:23;;;;;;;;;;:::i;:::-;;;;;;;;;;;;25027:40;;;;;;;;;;-1:-1:-1;25027:40:0;;;;:48;;:40;:48;:106;;;;-1:-1:-1;;;;;;25079:27:0;;25132:1;25079:27;;;:20;:27;;;;;25132:1;25107:20;25100:5;25107:13;:20::i;:::-;25128:1;25107:23;;;;;;;;;;:::i;:::-;;;;;;;25079:52;;;;;;;;;;;;:54;25027:106;25024:333;;;25165:32;25173:20;25187:5;25173:13;:20::i;:::-;25194:1;25173:23;;;;;;;;;;:::i;:::-;;;;;;;25165:7;:32::i;:::-;-1:-1:-1;;;;;25156:41:0;:5;-1:-1:-1;;;;;25156:41:0;;25153:189;;;-1:-1:-1;;;;;25249:27:0;;;;;;:20;:27;;;;;25229:93;;25320:1;;25230:84;;25307:6;;25249:27;25277:20;25270:5;25277:13;:20::i;:::-;25298:1;25277:23;;;;;;;;;;:::i;:::-;;;;;;;25249:52;;;;;;;;;;;;25231:15;:70;;;;:::i;:::-;25230:76;;:84::i;:::-;25229:90;;:93::i;:::-;25221:101;;;;:::i;:::-;;;25153:189;25005:3;;;;:::i;:::-;;;;24957:412;;;-1:-1:-1;25385:6:0;24853:555;-1:-1:-1;;24853:555:0:o;10490:104::-;10546:13;10579:7;10572:14;;;;;:::i;22878:1965::-;22947:14;;;;:22;;:14;:22;;:47;;-1:-1:-1;22973:13:0;;;;;;;;:21;;:13;:21;22947:47;22939:95;;;;-1:-1:-1;;;22939:95:0;;22260:2:1;22939:95:0;;;22242:21:1;22299:2;22279:18;;;22272:30;22338:34;22318:18;;;22311:62;-1:-1:-1;;;22389:18:1;;;22382:33;22432:19;;22939:95:0;22058:399:1;22939:95:0;23045:14;23062:13;17627:10;:17;;17539:113;23062:13;23045:30;;23108:1;23094:11;:15;23086:55;;;;-1:-1:-1;;;23086:55:0;;23016:2:1;23086:55:0;;;22998:21:1;23055:2;23035:18;;;23028:30;23094:29;23074:18;;;23067:57;23141:18;;23086:55:0;22814:351:1;23086:55:0;23157:14;;;;:22;;:14;:22;23154:1672;;;23217:10;23203:25;;;;:13;:25;;;;;;;;:31;;:25;:31;23195:67;;;;-1:-1:-1;;;23195:67:0;;22664:2:1;23195:67:0;;;22646:21:1;22703:2;22683:18;;;22676:30;22742:25;22722:18;;;22715:53;22785:18;;23195:67:0;22462:347:1;23195:67:0;23300:16;;23285:11;:31;;23277:76;;;;-1:-1:-1;;;23277:76:0;;14167:2:1;23277:76:0;;;14149:21:1;;;14186:18;;;14179:30;14245:34;14225:18;;;14218:62;14297:18;;23277:76:0;13965:356:1;23277:76:0;23389:11;;:28;;23405:11;23389:15;:28::i;:::-;23376:9;:41;;23368:72;;;;-1:-1:-1;;;23368:72:0;;20376:2:1;23368:72:0;;;20358:21:1;20415:2;20395:18;;;20388:30;-1:-1:-1;;;20434:18:1;;;20427:48;20492:18;;23368:72:0;20174:342:1;23368:72:0;23497:16;;23463:13;;:30;;23481:11;23463:17;:30::i;:::-;:50;;23455:93;;;;-1:-1:-1;;;23455:93:0;;18478:2:1;23455:93:0;;;18460:21:1;18517:2;18497:18;;;18490:30;18556:32;18536:18;;;18529:60;18606:18;;23455:93:0;18276:354:1;23455:93:0;23614:16;;23582:10;23571:22;;;;:10;:22;;;;;;:39;;23598:11;23571:26;:39::i;:::-;:59;;23563:96;;;;-1:-1:-1;;;23563:96:0;;13401:2:1;23563:96:0;;;13383:21:1;13440:2;13420:18;;;13413:30;13479:26;13459:18;;;13452:54;13523:18;;23563:96:0;13199:348:1;23563:96:0;23689:1;23674:248;23697:11;23692:1;:16;;;23674:248;;23736:33;23746:10;23758;;;;:6;:10;:::i;:::-;23736:9;:33::i;:::-;23809:10;23788:32;;;;:20;:32;;;;;23835:15;;23821:10;;;;:6;:10;:::i;:::-;23788:44;;;;;;;;;;;;;;-1:-1:-1;23788:44:0;;;:62;;;;23878:10;23869:20;;:8;:20;;;;;23902:4;;23890:8;;;;:6;:8;:::i;:::-;23869:30;;;;;;;;;;;-1:-1:-1;23869:30:0;:37;;-1:-1:-1;;23869:37:0;;;;;;;;;;23710:3;;;;:::i;:::-;;;;23674:248;;;-1:-1:-1;23947:10:0;23936:22;;;;:10;:22;;;;;:35;;23960:11;;23936:22;:35;;23960:11;;23936:35;:::i;:::-;;;;;;;;24003:11;23986:13;;:28;;;;;;;:::i;:::-;;;;-1:-1:-1;23154:1672:0;;-1:-1:-1;23154:1672:0;;24046:13;;;;;;;;:21;;:13;:21;24043:783;;;24106:15;;24091:11;:30;;24083:75;;;;-1:-1:-1;;;24083:75:0;;19253:2:1;24083:75:0;;;19235:21:1;;;19272:18;;;19265:30;19331:34;19311:18;;;19304:62;19383:18;;24083:75:0;19051:356:1;24083:75:0;24194:10;;:27;;24209:11;24194:14;:27::i;:::-;24181:9;:40;;24173:71;;;;-1:-1:-1;;;24173:71:0;;20376:2:1;24173:71:0;;;20358:21:1;20415:2;20395:18;;;20388:30;-1:-1:-1;;;20434:18:1;;;20427:48;20492:18;;24173:71:0;20174:342:1;24173:71:0;24300:15;;24267:12;;:29;;24284:11;24267:16;:29::i;:::-;:48;;24259:91;;;;-1:-1:-1;;;24259:91:0;;18478:2:1;24259:91:0;;;18460:21:1;18517:2;18497:18;;;18490:30;18556:32;18536:18;;;18529:60;18606:18;;24259:91:0;18276:354:1;24259:91:0;24416:15;;24384:10;24373:22;;;;:10;:22;;;;;;:39;;24400:11;24373:26;:39::i;:::-;:58;;24365:95;;;;-1:-1:-1;;;24365:95:0;;12289:2:1;24365:95:0;;;12271:21:1;12328:2;12308:18;;;12301:30;12367:26;12347:18;;;12340:54;12411:18;;24365:95:0;12087:348:1;24365:95:0;24490:1;24475:248;24498:11;24493:1;:16;;;24475:248;;24537:33;24547:10;24559;;;;:6;:10;:::i;24537:33::-;24610:10;24589:32;;;;:20;:32;;;;;24636:15;;24622:10;;;;:6;:10;:::i;:::-;24589:44;;;;;;;;;;;;;;-1:-1:-1;24589:44:0;;;:62;;;;24679:10;24670:20;;:8;:20;;;;;24703:4;;24691:8;;;;:6;:8;:::i;:::-;24670:30;;;;;;;;;;;-1:-1:-1;24670:30:0;:37;;-1:-1:-1;;24670:37:0;;;;;;;;;;24511:3;;;;:::i;:::-;;;;24475:248;;;-1:-1:-1;24748:10:0;24737:22;;;;:10;:22;;;;;:35;;24761:11;;24737:22;:35;;24761:11;;24737:35;:::i;:::-;;;;;;;;24803:11;24787:12;;:27;;;;;;;:::i;:::-;;;;-1:-1:-1;;22928:1915:0;22878:1965;:::o;11694:295::-;-1:-1:-1;;;;;11797:24:0;;8804:10;11797:24;;11789:62;;;;-1:-1:-1;;;11789:62:0;;13047:2:1;11789:62:0;;;13029:21:1;13086:2;13066:18;;;13059:30;13125:27;13105:18;;;13098:55;13170:18;;11789:62:0;12845:349:1;11789:62:0;8804:10;11864:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;11864:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;11864:53:0;;;;;;;;;;11933:48;;9285:41:1;;;11864:42:0;;8804:10;11933:48;;9258:18:1;11933:48:0;;;;;;;11694:295;;:::o;28867:67::-;20247:6;;-1:-1:-1;;;;;20247:6:0;8804:10;20309:23;20301:68;;;;-1:-1:-1;;;20301:68:0;;;;;;;:::i;:::-;28911:8:::1;:15:::0;;-1:-1:-1;;28911:15:0::1;28922:4;28911:15;::::0;;28867:67::o;26995:99::-;20247:6;;-1:-1:-1;;;;;20247:6:0;8804:10;20309:23;20301:68;;;;-1:-1:-1;;;20301:68:0;;;;;;;:::i;:::-;27064:13:::1;:22:::0;;;::::1;;;;-1:-1:-1::0;;27064:22:0;;::::1;::::0;;;::::1;::::0;;26995:99::o;12666:328::-;12841:41;8804:10;12874:7;12841:18;:41::i;:::-;12833:103;;;;-1:-1:-1;;;12833:103:0;;;;;;;:::i;:::-;12947:39;12961:4;12967:2;12971:7;12980:5;12947:13;:39::i;:::-;12666:328;;;;:::o;28320:539::-;13394:4;13418:16;;;:7;:16;;;;;;28418:13;;-1:-1:-1;;;;;13418:16:0;28443:105;;;;-1:-1:-1;;;28443:105:0;;;;;;;:::i;:::-;28572:8;;;;28569:70;;28613:14;28606:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28320:539;;;:::o;28569:70::-;28651:28;28682:10;:8;:10::i;:::-;28651:41;;28741:1;28716:14;28710:28;:32;:141;;;;;;;;;;;;;;;;;28782:14;28798:18;:7;:16;:18::i;:::-;28818:13;28765:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28703:148;28320:539;-1:-1:-1;;;28320:539:0:o;29195:105::-;20247:6;;-1:-1:-1;;;;;20247:6:0;8804:10;20309:23;20301:68;;;;-1:-1:-1;;;20301:68:0;;;;;;;:::i;:::-;29267:16:::1;:25:::0;29195:105::o;29080:107::-;20247:6;;-1:-1:-1;;;;;20247:6:0;8804:10;20309:23;20301:68;;;;-1:-1:-1;;;20301:68:0;;;;;;;:::i;:::-;29155:15:::1;:24:::0;29080:107::o;27546:190::-;20247:6;;-1:-1:-1;;;;;20247:6:0;8804:10;20309:23;20301:68;;;;-1:-1:-1;;;20301:68:0;;;;;;;:::i;:::-;27631:6:::1;27627:102;27647:10;:17;27643:1;:21;27627:102;;;27713:4;27682:13;:28;27696:10;27707:1;27696:13;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;27682:28:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;27682:28:0;:35;;-1:-1:-1;;27682:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27666:3;::::1;::::0;::::1;:::i;:::-;;;;27627:102;;28946:126:::0;20247:6;;-1:-1:-1;;;;;20247:6:0;8804:10;20309:23;20301:68;;;;-1:-1:-1;;;20301:68:0;;;;;;;:::i;:::-;29032:32;;::::1;::::0;:14:::1;::::0;:32:::1;::::0;::::1;::::0;::::1;:::i;20499:192::-:0;20247:6;;-1:-1:-1;;;;;20247:6:0;8804:10;20309:23;20301:68;;;;-1:-1:-1;;;20301:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20588:22:0;::::1;20580:73;;;::::0;-1:-1:-1;;;20580:73:0;;11169:2:1;20580:73:0::1;::::0;::::1;11151:21:1::0;11208:2;11188:18;;;11181:30;11247:34;11227:18;;;11220:62;-1:-1:-1;;;11298:18:1;;;11291:36;11344:19;;20580:73:0::1;10967:402:1::0;20580:73:0::1;20664:19;20674:8;20664:9;:19::i;:::-;20499:192:::0;:::o;26235:497::-;26295:17;;;13394:4;13418:16;;;:7;:16;;;;;;-1:-1:-1;;;;;13418:16:0;26287:77;;;;-1:-1:-1;;;26287:77:0;;;;;;;:::i;:::-;26402:10;26383:17;;;;:7;:17::i;:::-;-1:-1:-1;;;;;26383:29:0;;26375:64;;;;-1:-1:-1;;;26375:64:0;;9986:2:1;26375:64:0;;;9968:21:1;10025:2;10005:18;;;9998:30;10064:25;10044:18;;;10037:53;10107:18;;26375:64:0;9784:347:1;26375:64:0;26488:1;26458:27;26474:10;26458:15;:27::i;:::-;:31;26450:76;;;;-1:-1:-1;;;26450:76:0;;;;;;;:::i;:::-;26537:18;26558:39;26576:10;26588:8;26558:39;;:17;:39::i;:::-;:46;;26598:6;26558:46;:::i;:::-;26615:6;;:38;;-1:-1:-1;;;26615:38:0;;26631:10;26615:38;;;8403:51:1;8470:18;;;8463:34;;;26537:67:0;;-1:-1:-1;;;;;;26615:6:0;;:15;;8376:18:1;;26615:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;26685:10:0;26664:32;;;;:20;:32;;;;;;;;:42;;;;;;;;;;26709:15;26664:60;;26235:497::o;9606:305::-;9708:4;-1:-1:-1;;;;;;9745:40:0;;-1:-1:-1;;;9745:40:0;;:105;;-1:-1:-1;;;;;;;9802:48:0;;-1:-1:-1;;;9802:48:0;9745:105;:158;;;-1:-1:-1;;;;;;;;;;1891:40:0;;;9867:36;1782:157;15581:174;15656:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;15656:29:0;-1:-1:-1;;;;;15656:29:0;;;;;;;;:24;;15710:23;15656:24;15710:14;:23::i;:::-;-1:-1:-1;;;;;15701:46:0;;;;;;;;;;;15581:174;;:::o;13464:348::-;13557:4;13418:16;;;:7;:16;;;;;;-1:-1:-1;;;;;13418:16:0;13574:73;;;;-1:-1:-1;;;13574:73:0;;13754:2:1;13574:73:0;;;13736:21:1;13793:2;13773:18;;;13766:30;13832:34;13812:18;;;13805:62;-1:-1:-1;;;13883:18:1;;;13876:42;13935:19;;13574:73:0;13552:408:1;13574:73:0;13658:13;13674:23;13689:7;13674:14;:23::i;:::-;13658:39;;13727:5;-1:-1:-1;;;;;13716:16:0;:7;-1:-1:-1;;;;;13716:16:0;;:51;;;;13760:7;-1:-1:-1;;;;;13736:31:0;:20;13748:7;13736:11;:20::i;:::-;-1:-1:-1;;;;;13736:31:0;;13716:51;:87;;;-1:-1:-1;;;;;;12118:25:0;;;12094:4;12118:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;13771:32;13708:96;13464:348;-1:-1:-1;;;;13464:348:0:o;14997:576::-;15156:4;-1:-1:-1;;;;;15129:31:0;:23;15144:7;15129:14;:23::i;:::-;-1:-1:-1;;;;;15129:31:0;;15121:85;;;;-1:-1:-1;;;15121:85:0;;18068:2:1;15121:85:0;;;18050:21:1;18107:2;18087:18;;;18080:30;18146:34;18126:18;;;18119:62;-1:-1:-1;;;18197:18:1;;;18190:39;18246:19;;15121:85:0;17866:405:1;15121:85:0;-1:-1:-1;;;;;15225:16:0;;15217:65;;;;-1:-1:-1;;;15217:65:0;;12642:2:1;15217:65:0;;;12624:21:1;12681:2;12661:18;;;12654:30;12720:34;12700:18;;;12693:62;-1:-1:-1;;;12771:18:1;;;12764:34;12815:19;;15217:65:0;12440:400:1;15217:65:0;15295:39;15316:4;15322:2;15326:7;15295:20;:39::i;:::-;15347:29;15364:1;15368:7;15347:8;:29::i;:::-;-1:-1:-1;;;;;15389:15:0;;;;;;:9;:15;;;;;:20;;15408:1;;15389:15;:20;;15408:1;;15389:20;:::i;:::-;;;;-1:-1:-1;;;;;;;15420:13:0;;;;;;:9;:13;;;;;:18;;15437:1;;15420:13;:18;;15437:1;;15420:18;:::i;:::-;;;;-1:-1:-1;;15449:16:0;;;;:7;:16;;;;;;;;:21;;-1:-1:-1;;;;;;15449:21:0;-1:-1:-1;;;;;15449:21:0;;;;;;;;;15483:26;;;;;;:20;:26;;;;;:35;;;;;;;;;:39;;;15538:27;;15449:16;;:21;;15483:26;15538:27;;;14997:576;;;:::o;20699:173::-;20774:6;;;-1:-1:-1;;;;;20791:17:0;;;-1:-1:-1;;;;;;20791:17:0;;;;;;;20824:40;;20774:6;;;20791:17;20774:6;;20824:40;;20755:16;;20824:40;20744:128;20699:173;:::o;7653:333::-;7711:7;7810:1;7806;:5;7798:44;;;;-1:-1:-1;;;7798:44:0;;14528:2:1;7798:44:0;;;14510:21:1;14567:2;14547:18;;;14540:30;14606:28;14586:18;;;14579:56;14652:18;;7798:44:0;14326:350:1;7798:44:0;7853:9;7865:5;7869:1;7865;:5;:::i;7402:245::-;7460:7;7483:6;7479:47;;-1:-1:-1;7513:1:0;7506:8;;7479:47;7536:9;7548:5;7552:1;7548;:5;:::i;:::-;7536:17;-1:-1:-1;7581:1:0;7572:5;7576:1;7536:17;7572:5;:::i;:::-;:10;7564:56;;;;-1:-1:-1;;;7564:56:0;;16892:2:1;7564:56:0;;;16874:21:1;16931:2;16911:18;;;16904:30;16970:34;16950:18;;;16943:62;-1:-1:-1;;;17021:18:1;;;17014:31;17062:19;;7564:56:0;16690:397:1;7029:179:0;7087:7;;7119:5;7123:1;7119;:5;:::i;:::-;7107:17;;7148:1;7143;:6;;7135:46;;;;-1:-1:-1;;;7135:46:0;;11933:2:1;7135:46:0;;;11915:21:1;11972:2;11952:18;;;11945:30;12011:29;11991:18;;;11984:57;12058:18;;7135:46:0;11731:351:1;13820:110:0;13896:26;13906:2;13910:7;13896:26;;;;;;;;;;;;:9;:26::i;13004:315::-;13161:28;13171:4;13177:2;13181:7;13161:9;:28::i;:::-;13208:48;13231:4;13237:2;13241:7;13250:5;13208:22;:48::i;:::-;13200:111;;;;-1:-1:-1;;;13200:111:0;;;;;;;:::i;26757:108::-;26817:13;26850:7;26843:14;;;;;:::i;2063:542::-;2119:13;2159:10;2155:53;;-1:-1:-1;;2186:10:0;;;;;;;;;;;;-1:-1:-1;;;2186:10:0;;;;;2063:542::o;2155:53::-;2233:5;2218:12;2274:78;2281:9;;2274:78;;2307:8;;;;:::i;:::-;;-1:-1:-1;2330:10:0;;-1:-1:-1;2338:2:0;2330:10;;:::i;:::-;;;2274:78;;;2362:19;2394:6;2384:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2384:17:0;;2362:39;;2412:154;2419:10;;2412:154;;2446:11;2456:1;2446:11;;:::i;:::-;;-1:-1:-1;2515:10:0;2523:2;2515:5;:10;:::i;:::-;2502:24;;:2;:24;:::i;:::-;2489:39;;2472:6;2479;2472:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;2472:56:0;;;;;;;;-1:-1:-1;2543:11:0;2552:2;2543:11;;:::i;:::-;;;2412:154;;17901:589;-1:-1:-1;;;;;18107:18:0;;18103:187;;18142:40;18174:7;18831:10;:17;;18804:24;;;;:15;:24;;;;;:44;;;18859:24;;;;;;;;;;;;18727:164;18142:40;18103:187;;;18212:2;-1:-1:-1;;;;;18204:10:0;:4;-1:-1:-1;;;;;18204:10:0;;18200:90;;18231:47;18264:4;18270:7;18231:32;:47::i;:::-;-1:-1:-1;;;;;18304:16:0;;18300:183;;18337:45;18374:7;18337:36;:45::i;18300:183::-;18410:4;-1:-1:-1;;;;;18404:10:0;:2;-1:-1:-1;;;;;18404:10:0;;18400:83;;18431:40;18459:2;18463:7;18431:27;:40::i;13938:321::-;14068:18;14074:2;14078:7;14068:5;:18::i;:::-;14119:54;14150:1;14154:2;14158:7;14167:5;14119:22;:54::i;:::-;14097:154;;;;-1:-1:-1;;;14097:154:0;;;;;;;:::i;15763:799::-;15918:4;-1:-1:-1;;;;;15939:13:0;;3605:20;3653:8;15935:620;;15975:72;;-1:-1:-1;;;15975:72:0;;-1:-1:-1;;;;;15975:36:0;;;;;:72;;8804:10;;16026:4;;16032:7;;16041:5;;15975:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15975:72:0;;;;;;;;-1:-1:-1;;15975:72:0;;;;;;;;;;;;:::i;:::-;;;15971:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16217:13:0;;16213:272;;16260:60;;-1:-1:-1;;;16260:60:0;;;;;;;:::i;16213:272::-;16435:6;16429:13;16420:6;16416:2;16412:15;16405:38;15971:529;-1:-1:-1;;;;;;16098:51:0;-1:-1:-1;;;16098:51:0;;-1:-1:-1;16091:58:0;;15935:620;-1:-1:-1;16539:4:0;15763:799;;;;;;:::o;18899:567::-;18993:22;19043:1;19018:22;19035:4;19018:16;:22::i;:::-;:26;;;;:::i;:::-;19055:18;19076:26;;;:17;:26;;;;;;18993:51;;-1:-1:-1;19129:28:0;;;19125:236;;-1:-1:-1;;;;;19196:18:0;;19174:19;19196:18;;;:12;:18;;;;;;;;:34;;;;;;;;;19247:30;;;;;;:44;;;19306:30;;:17;:30;;;;;:43;;;19125:236;-1:-1:-1;19380:26:0;;;;:17;:26;;;;;;;;19373:33;;;-1:-1:-1;;;;;19424:18:0;;;;;:12;:18;;;;;:34;;;;;;;19417:41;18899:567::o;19474:435::-;19590:10;:17;19565:22;;19590:21;;19610:1;;19590:21;:::i;:::-;19622:18;19643:24;;;:15;:24;;;;;;19702:10;:26;;19565:46;;-1:-1:-1;19643:24:0;;19565:46;;19702:26;;;;;;:::i;:::-;;;;;;;;;19680:48;;19766:11;19741:10;19752;19741:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;19788:28;;;:15;:28;;;;;;;:41;;;19850:24;;;;;19843:31;19885:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;19545:364;;;19474:435;:::o;18498:221::-;18583:14;18600:20;18617:2;18600:16;:20::i;:::-;-1:-1:-1;;;;;18631:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;18676:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;18498:221:0:o;14267:382::-;-1:-1:-1;;;;;14347:16:0;;14339:61;;;;-1:-1:-1;;;14339:61:0;;16531:2:1;14339:61:0;;;16513:21:1;;;16550:18;;;16543:30;16609:34;16589:18;;;16582:62;16661:18;;14339:61:0;16329:356:1;14339:61:0;13394:4;13418:16;;;:7;:16;;;;;;-1:-1:-1;;;;;13418:16:0;:30;14411:58;;;;-1:-1:-1;;;14411:58:0;;11576:2:1;14411:58:0;;;11558:21:1;11615:2;11595:18;;;11588:30;11654;11634:18;;;11627:58;11702:18;;14411:58:0;11374:352:1;14411:58:0;14482:45;14511:1;14515:2;14519:7;14482:20;:45::i;:::-;-1:-1:-1;;;;;14540:13:0;;;;;;:9;:13;;;;;:18;;14557:1;;14540:13;:18;;14557:1;;14540:18;:::i;:::-;;;;-1:-1:-1;;14569:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;14569:21:0;-1:-1:-1;;;;;14569:21:0;;;;;;;;14608:33;;14569:16;;;14608:33;;14569:16;;14608:33;14267:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:406:1;78:5;112:18;104:6;101:30;98:56;;;134:18;;:::i;:::-;172:57;217:2;196:15;;-1:-1:-1;;192:29:1;223:4;188:40;172:57;:::i;:::-;163:66;;252:6;245:5;238:21;292:3;283:6;278:3;274:16;271:25;268:45;;;309:1;306;299:12;268:45;358:6;353:3;346:4;339:5;335:16;322:43;412:1;405:4;396:6;389:5;385:18;381:29;374:40;14:406;;;;;:::o;425:173::-;493:20;;-1:-1:-1;;;;;542:31:1;;532:42;;522:70;;588:1;585;578:12;522:70;425:173;;;:::o;603:186::-;662:6;715:2;703:9;694:7;690:23;686:32;683:52;;;731:1;728;721:12;683:52;754:29;773:9;754:29;:::i;794:260::-;862:6;870;923:2;911:9;902:7;898:23;894:32;891:52;;;939:1;936;929:12;891:52;962:29;981:9;962:29;:::i;:::-;952:39;;1010:38;1044:2;1033:9;1029:18;1010:38;:::i;:::-;1000:48;;794:260;;;;;:::o;1059:328::-;1136:6;1144;1152;1205:2;1193:9;1184:7;1180:23;1176:32;1173:52;;;1221:1;1218;1211:12;1173:52;1244:29;1263:9;1244:29;:::i;:::-;1234:39;;1292:38;1326:2;1315:9;1311:18;1292:38;:::i;:::-;1282:48;;1377:2;1366:9;1362:18;1349:32;1339:42;;1059:328;;;;;:::o;1392:666::-;1487:6;1495;1503;1511;1564:3;1552:9;1543:7;1539:23;1535:33;1532:53;;;1581:1;1578;1571:12;1532:53;1604:29;1623:9;1604:29;:::i;:::-;1594:39;;1652:38;1686:2;1675:9;1671:18;1652:38;:::i;:::-;1642:48;;1737:2;1726:9;1722:18;1709:32;1699:42;;1792:2;1781:9;1777:18;1764:32;1819:18;1811:6;1808:30;1805:50;;;1851:1;1848;1841:12;1805:50;1874:22;;1927:4;1919:13;;1915:27;-1:-1:-1;1905:55:1;;1956:1;1953;1946:12;1905:55;1979:73;2044:7;2039:2;2026:16;2021:2;2017;2013:11;1979:73;:::i;:::-;1969:83;;;1392:666;;;;;;;:::o;2063:315::-;2128:6;2136;2189:2;2177:9;2168:7;2164:23;2160:32;2157:52;;;2205:1;2202;2195:12;2157:52;2228:29;2247:9;2228:29;:::i;:::-;2218:39;;2307:2;2296:9;2292:18;2279:32;2320:28;2342:5;2320:28;:::i;:::-;2367:5;2357:15;;;2063:315;;;;;:::o;2383:254::-;2451:6;2459;2512:2;2500:9;2491:7;2487:23;2483:32;2480:52;;;2528:1;2525;2518:12;2480:52;2551:29;2570:9;2551:29;:::i;:::-;2541:39;2627:2;2612:18;;;;2599:32;;-1:-1:-1;;;2383:254:1:o;2642:963::-;2726:6;2757:2;2800;2788:9;2779:7;2775:23;2771:32;2768:52;;;2816:1;2813;2806:12;2768:52;2856:9;2843:23;2885:18;2926:2;2918:6;2915:14;2912:34;;;2942:1;2939;2932:12;2912:34;2980:6;2969:9;2965:22;2955:32;;3025:7;3018:4;3014:2;3010:13;3006:27;2996:55;;3047:1;3044;3037:12;2996:55;3083:2;3070:16;3105:2;3101;3098:10;3095:36;;;3111:18;;:::i;:::-;3157:2;3154:1;3150:10;3140:20;;3180:28;3204:2;3200;3196:11;3180:28;:::i;:::-;3242:15;;;3273:12;;;;3305:11;;;3335;;;3331:20;;3328:33;-1:-1:-1;3325:53:1;;;3374:1;3371;3364:12;3325:53;3396:1;3387:10;;3406:169;3420:2;3417:1;3414:9;3406:169;;;3477:23;3496:3;3477:23;:::i;:::-;3465:36;;3438:1;3431:9;;;;;3521:12;;;;3553;;3406:169;;;-1:-1:-1;3594:5:1;2642:963;-1:-1:-1;;;;;;;;2642:963:1:o;3610:241::-;3666:6;3719:2;3707:9;3698:7;3694:23;3690:32;3687:52;;;3735:1;3732;3725:12;3687:52;3774:9;3761:23;3793:28;3815:5;3793:28;:::i;3856:245::-;3923:6;3976:2;3964:9;3955:7;3951:23;3947:32;3944:52;;;3992:1;3989;3982:12;3944:52;4024:9;4018:16;4043:28;4065:5;4043:28;:::i;4106:245::-;4164:6;4217:2;4205:9;4196:7;4192:23;4188:32;4185:52;;;4233:1;4230;4223:12;4185:52;4272:9;4259:23;4291:30;4315:5;4291:30;:::i;4356:249::-;4425:6;4478:2;4466:9;4457:7;4453:23;4449:32;4446:52;;;4494:1;4491;4484:12;4446:52;4526:9;4520:16;4545:30;4569:5;4545:30;:::i;4610:450::-;4679:6;4732:2;4720:9;4711:7;4707:23;4703:32;4700:52;;;4748:1;4745;4738:12;4700:52;4788:9;4775:23;4821:18;4813:6;4810:30;4807:50;;;4853:1;4850;4843:12;4807:50;4876:22;;4929:4;4921:13;;4917:27;-1:-1:-1;4907:55:1;;4958:1;4955;4948:12;4907:55;4981:73;5046:7;5041:2;5028:16;5023:2;5019;5015:11;4981:73;:::i;5065:180::-;5124:6;5177:2;5165:9;5156:7;5152:23;5148:32;5145:52;;;5193:1;5190;5183:12;5145:52;-1:-1:-1;5216:23:1;;5065:180;-1:-1:-1;5065:180:1:o;5250:269::-;5307:6;5360:2;5348:9;5339:7;5335:23;5331:32;5328:52;;;5376:1;5373;5366:12;5328:52;5415:9;5402:23;5465:4;5458:5;5454:16;5447:5;5444:27;5434:55;;5485:1;5482;5475:12;5524:257;5565:3;5603:5;5597:12;5630:6;5625:3;5618:19;5646:63;5702:6;5695:4;5690:3;5686:14;5679:4;5672:5;5668:16;5646:63;:::i;:::-;5763:2;5742:15;-1:-1:-1;;5738:29:1;5729:39;;;;5770:4;5725:50;;5524:257;-1:-1:-1;;5524:257:1:o;5786:1527::-;6010:3;6048:6;6042:13;6074:4;6087:51;6131:6;6126:3;6121:2;6113:6;6109:15;6087:51;:::i;:::-;6201:13;;6160:16;;;;6223:55;6201:13;6160:16;6245:15;;;6223:55;:::i;:::-;6367:13;;6300:20;;;6340:1;;6427;6449:18;;;;6502;;;;6529:93;;6607:4;6597:8;6593:19;6581:31;;6529:93;6670:2;6660:8;6657:16;6637:18;6634:40;6631:167;;;-1:-1:-1;;;6697:33:1;;6753:4;6750:1;6743:15;6783:4;6704:3;6771:17;6631:167;6814:18;6841:110;;;;6965:1;6960:328;;;;6807:481;;6841:110;-1:-1:-1;;6876:24:1;;6862:39;;6921:20;;;;-1:-1:-1;6841:110:1;;6960:328;23705:1;23698:14;;;23742:4;23729:18;;7055:1;7069:169;7083:8;7080:1;7077:15;7069:169;;;7165:14;;7150:13;;;7143:37;7208:16;;;;7100:10;;7069:169;;;7073:3;;7269:8;7262:5;7258:20;7251:27;;6807:481;-1:-1:-1;7304:3:1;;5786:1527;-1:-1:-1;;;;;;;;;;;5786:1527:1:o;7736:488::-;-1:-1:-1;;;;;8005:15:1;;;7987:34;;8057:15;;8052:2;8037:18;;8030:43;8104:2;8089:18;;8082:34;;;8152:3;8147:2;8132:18;;8125:31;;;7930:4;;8173:45;;8198:19;;8190:6;8173:45;:::i;:::-;8165:53;7736:488;-1:-1:-1;;;;;;7736:488:1:o;8508:632::-;8679:2;8731:21;;;8801:13;;8704:18;;;8823:22;;;8650:4;;8679:2;8902:15;;;;8876:2;8861:18;;;8650:4;8945:169;8959:6;8956:1;8953:13;8945:169;;;9020:13;;9008:26;;9089:15;;;;9054:12;;;;8981:1;8974:9;8945:169;;;-1:-1:-1;9131:3:1;;8508:632;-1:-1:-1;;;;;;8508:632:1:o;9560:219::-;9709:2;9698:9;9691:21;9672:4;9729:44;9769:2;9758:9;9754:18;9746:6;9729:44;:::i;10548:414::-;10750:2;10732:21;;;10789:2;10769:18;;;10762:30;10828:34;10823:2;10808:18;;10801:62;-1:-1:-1;;;10894:2:1;10879:18;;10872:48;10952:3;10937:19;;10548:414::o;15106:397::-;15308:2;15290:21;;;15347:2;15327:18;;;15320:30;15386:34;15381:2;15366:18;;15359:62;-1:-1:-1;;;15452:2:1;15437:18;;15430:31;15493:3;15478:19;;15106:397::o;17505:356::-;17707:2;17689:21;;;17726:18;;;17719:30;17785:34;17780:2;17765:18;;17758:62;17852:2;17837:18;;17505:356::o;18635:411::-;18837:2;18819:21;;;18876:2;18856:18;;;18849:30;18915:34;18910:2;18895:18;;18888:62;-1:-1:-1;;;18981:2:1;18966:18;;18959:45;19036:3;19021:19;;18635:411::o;20521:413::-;20723:2;20705:21;;;20762:2;20742:18;;;20735:30;20801:34;20796:2;20781:18;;20774:62;-1:-1:-1;;;20867:2:1;20852:18;;20845:47;20924:3;20909:19;;20521:413::o;23352:275::-;23423:2;23417:9;23488:2;23469:13;;-1:-1:-1;;23465:27:1;23453:40;;23523:18;23508:34;;23544:22;;;23505:62;23502:88;;;23570:18;;:::i;:::-;23606:2;23599:22;23352:275;;-1:-1:-1;23352:275:1:o;23758:128::-;23798:3;23829:1;23825:6;23822:1;23819:13;23816:39;;;23835:18;;:::i;:::-;-1:-1:-1;23871:9:1;;23758:128::o;23891:120::-;23931:1;23957;23947:35;;23962:18;;:::i;:::-;-1:-1:-1;23996:9:1;;23891:120::o;24016:168::-;24056:7;24122:1;24118;24114:6;24110:14;24107:1;24104:21;24099:1;24092:9;24085:17;24081:45;24078:71;;;24129:18;;:::i;:::-;-1:-1:-1;24169:9:1;;24016:168::o;24189:125::-;24229:4;24257:1;24254;24251:8;24248:34;;;24262:18;;:::i;:::-;-1:-1:-1;24299:9:1;;24189:125::o;24319:258::-;24391:1;24401:113;24415:6;24412:1;24409:13;24401:113;;;24491:11;;;24485:18;24472:11;;;24465:39;24437:2;24430:10;24401:113;;;24532:6;24529:1;24526:13;24523:48;;;-1:-1:-1;;24567:1:1;24549:16;;24542:27;24319:258::o;24582:380::-;24661:1;24657:12;;;;24704;;;24725:61;;24779:4;24771:6;24767:17;24757:27;;24725:61;24832:2;24824:6;24821:14;24801:18;24798:38;24795:161;;;24878:10;24873:3;24869:20;24866:1;24859:31;24913:4;24910:1;24903:15;24941:4;24938:1;24931:15;24795:161;;24582:380;;;:::o;24967:135::-;25006:3;-1:-1:-1;;25027:17:1;;25024:43;;;25047:18;;:::i;:::-;-1:-1:-1;25094:1:1;25083:13;;24967:135::o;25107:175::-;25144:3;25188:4;25181:5;25177:16;25217:4;25208:7;25205:17;25202:43;;;25225:18;;:::i;:::-;25274:1;25261:15;;25107:175;-1:-1:-1;;25107:175:1:o;25287:112::-;25319:1;25345;25335:35;;25350:18;;:::i;:::-;-1:-1:-1;25384:9:1;;25287:112::o;25404:127::-;25465:10;25460:3;25456:20;25453:1;25446:31;25496:4;25493:1;25486:15;25520:4;25517:1;25510:15;25536:127;25597:10;25592:3;25588:20;25585:1;25578:31;25628:4;25625:1;25618:15;25652:4;25649:1;25642:15;25668:127;25729:10;25724:3;25720:20;25717:1;25710:31;25760:4;25757:1;25750:15;25784:4;25781:1;25774:15;25800:127;25861:10;25856:3;25852:20;25849:1;25842:31;25892:4;25889:1;25882:15;25916:4;25913:1;25906:15;25932:127;25993:10;25988:3;25984:20;25981:1;25974:31;26024:4;26021:1;26014:15;26048:4;26045:1;26038:15;26064:118;26150:5;26143:13;26136:21;26129:5;26126:32;26116:60;;26172:1;26169;26162:12;26187:131;-1:-1:-1;;;;;;26261:32:1;;26251:43;;26241:71;;26308:1;26305;26298:12

Swarm Source

ipfs://b39ee47a7bf28c82fb2bb6c9ee6b65073a253fff77a99a697fb4f2849dc93e16
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.