ETH Price: $3,390.85 (+1.28%)

Token

Tiger Tiger Tiger (TigerTigerTiger)
 

Overview

Max Total Supply

3,662 TigerTigerTiger

Holders

2,618

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
222112.eth
Balance
1 TigerTigerTiger
0xA0cbE4Fa67BDA88E1e3f0084762Bb00ab0691d02
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:
TigerTigerTiger

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 16 of 16: TigerTigerTiger.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/****************************************
 * @author: tiger_nft                 *
 * @team:   L.E.V.O                *
 ****************************************
 *   L.E.V.O-ERC721 provides low-gas    *
 *           mints + transfers          *
 ****************************************/

import './Delegated.sol';
import './ERC721EnumerableT.sol';
import "./Strings.sol";
import "./ReentrancyGuard.sol";

contract TigerTigerTiger is ERC721EnumerableT, Delegated, ReentrancyGuard {
  using Strings for uint;


  /**
    * @dev Data structure of Moon
    */
  struct Moon {
    address owner;
    bool celestialType;
  }

  /**
     *    @notice Keep track of each user and their info
     */
    struct Staker {
        mapping(address => uint256[]) stakedTokens;
        mapping(address => uint256) timeStaked;
        uint256 amountStaked;
    }


    
    // @notice mapping of a staker to its current properties
    mapping(address => Staker) public stakers;

    // Mapping from token ID to owner address
    mapping(uint256 => address) public originalStakeOwner;

     // @notice event emitted when a user has staked a token
    event Staked(address owner, uint256 tokenId);

    // @notice event emitted when a user has unstaked a token
    event Unstaked(address owner, uint256 tokenId);

  bool public revealed = false;
 

  uint public MAX_SUPPLY   = 5000;
  uint public PRICE        = 0.05 ether;
  uint public MAX_QTY = 2;
  
  Moon[] public moons;

  bool public isWhitelistActive = false;
  bool public isMintActive = false;

  mapping(address => uint) public mintNum;

  mapping(address => uint) public accessList;

  bool public isStakeActive   = false;

  mapping(address => uint) private _balances;
  string private _tokenURIPrefix="ipfs://QmWn9W3yN77gvW23wfrBdX9a1BG5ej6ugCuQDRzEsb37KG/";
  string private _tokenURISuffix =  ".json";

  constructor() 
    ERC721T("Tiger Tiger Tiger", "TigerTigerTiger"){
  }
  
/**
  * @dev Returns the number of tokens in ``owners``'s account.
  */
  function balanceOf(address account) public view override returns (uint) {
    require(account != address(0), "Tiger: balance query for the zero address");
    return _balances[account];
  }

/**
  * @dev Returns the bool of tokens if``owner``'s account contains the tokenIds.
  */
  function isOwnerOf( address account, uint[] calldata tokenIds ) external view override returns( bool ){
    for(uint i; i < tokenIds.length; ++i ){
      if( moons[ tokenIds[i] ].owner != account )
        return false;
    }

    return true;
  }

/**
  * @dev Returns the owner of the `tokenId` token.
  *
  */
  function ownerOf( uint tokenId ) public override view returns( address owner_ ){
    address owner = moons[tokenId-1].owner;
    require(owner != address(0), "Tiger: query for nonexistent token");
    return owner;
  }

/**
  * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
  * Use along with {totalSupply} to enumerate all tokens.
  */
  function tokenByIndex(uint index) external view override returns (uint) {
    require(index <= totalSupply(), "Tiger: global index out of bounds");
    return index;
  }

/**
  * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
  * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
  */
  function tokenOfOwnerByIndex(address owner, uint index) public view override returns (uint tokenId) {
    uint count;
    for( uint i=1; i <= moons.length; ++i ){
      if( owner == moons[i-1].owner ){
        if( count == index )
          return i;
        else
          ++count;
      }
    }

    revert("ERC721Enumerable: owner index out of bounds");
  }

 /**
  * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
  */
  function tokenURI(uint tokenId) external view override returns (string memory) {
    require(_exists(tokenId), "Tiger: URI query for nonexistent token");
    return string(abi.encodePacked(_tokenURIPrefix, tokenId.toString(), _tokenURISuffix));
  }

/**
  * @dev Returns the total amount of tokens stored by the contract.
  */
  function totalSupply() public view override returns( uint totalSupply_ ){
    return moons.length;
  }



/**
  * @dev Returns the list of tokenIds stored by the owner's account.
  */
  function walletOfOwner( address account ) external view override returns( uint[] memory ){
    uint quantity = balanceOf( account );
    uint[] memory wallet = new uint[]( quantity );
    for( uint i; i < quantity; ++i ){
        wallet[i] = tokenOfOwnerByIndex( account, i );
    }
    return wallet;
  }

/**
  * @dev Owner sets the Staking contract address.
  */
  function setRevealState(bool reveal_) external onlyDelegates {
      revealed = reveal_;
  }



 /**
  * @dev mints token based on the number of qty specified.
  */
  function mint( uint quantity ) external payable nonReentrant {
    require(isMintActive == true,"Tiger: Minting needs to be enabled.");
    //If whitelist is active, people in WL can mint 
    //based on the allowable qty limit set by owner/delegates.
    if( isWhitelistActive ){
      require( accessList[ msg.sender ] >= quantity, "Tiger: Account is less than the qty limit");
      accessList[ msg.sender ] -= quantity;
    } else { 
      //For public, MAX_QTY limit will be applied. 
      //MAX_QTY is determined by the owner/delegates
      require(mintNum[msg.sender]+quantity <= MAX_QTY,"Tiger:Quantity must be less than or equal MAX_QTY");
      if(mintNum[msg.sender]+quantity>1){
         require( msg.value >= PRICE , "Tiger: Ether sent is not correct" );
      }
    }

    uint supply = totalSupply();
    require( supply + quantity <= MAX_SUPPLY, "Tiger: Mint/order exceeds supply" );
    mintNum[msg.sender] = mintNum[msg.sender] + quantity;
    for(uint i; i < quantity; i++){
       uint tokenId =  ++supply ;
      _mint( msg.sender, tokenId );
    }
  
    
  }



/**
  * @dev Returns the balance amount of the Contract address.
  */
  function getBalanceofContract() external view returns (uint256) {
    return address(this).balance;
  }

/**
  * @dev Withdraws an amount from the contract balance.
  */
  function withdraw(uint256 amount_) public onlyOwner {
    require(address(this).balance >= amount_, "Address: insufficient balance");

    // This will payout the owner 100% of the contract balance.
    // Do not remove this otherwise you will not be able to withdraw the funds.
    // =============================================================================
    (bool os, ) = payable(owner()).call{value: amount_}("");
    require(os);
    // =============================================================================
  }


  /**
  * @dev Allows team to mint the token without restriction.
  */
  function team_mint(uint[] calldata quantity, address[] calldata recipient) public onlyDelegates{
    require(quantity.length == recipient.length, "Tiger: Must provide equal quantities and recipients" );

    uint totalQuantity;
    uint supply = totalSupply();
    for(uint i; i < quantity.length; ++i){
      totalQuantity += quantity[i];
    }
    require( supply + totalQuantity < MAX_SUPPLY, "Tiger: Mint/order exceeds supply" );

    for(uint i; i < recipient.length; ++i){
      for(uint j; j < quantity[i]; ++j){
        uint tokenId = ++supply;
        _mint( recipient[i], tokenId);
      }
    }
  }

/**
  * @dev Owner/Delegate sets the Whitelist active flag.
  */
  function setWhitelistAddress(address[] calldata accounts, uint allowed) external onlyDelegates{
    for(uint i; i < accounts.length; ++i){
      accessList[ accounts[i] ] = allowed;
    }
  }

/**
  * @dev Owner/Delegate sets the Minting flag.
  */
  function setMintingActive(bool mintActive_) external onlyDelegates {
    require( isMintActive != mintActive_ , "Tiger: New value matches old" );
    isMintActive = mintActive_;
  }

/**
  * @dev Owner/Delegate sets the Whitelist active flag.
  */
  function setWhitelistActive(bool isWhitelistActive_) external onlyDelegates{
    require( isWhitelistActive != isWhitelistActive_ , "Tiger: New value matches old" );
    isWhitelistActive = isWhitelistActive_;
  }

/**
  * @dev Owner/Delegates sets the BaseURI of IPFS.
  */
  function setBaseURI(string calldata prefix, string calldata suffix) external onlyDelegates{
    _tokenURIPrefix = prefix;
    _tokenURISuffix = suffix;
  }

/**
  * @dev Owner/Delegate sets the Max supply of the token.
  */
  function setMaxSupply(uint maxSupply) external onlyDelegates{
    require( MAX_SUPPLY != maxSupply, "Tiger: New value matches old" );
    require( maxSupply >= totalSupply(), "Tiger: Specified supply is lower than current balance" );
    MAX_SUPPLY = maxSupply;
  }

/**
  * @dev Owner/Delegate sets the Max. qty 
  */
  function setMaxQty(uint maxQty) external onlyDelegates{
    require( MAX_QTY != maxQty, "Tiger: New value matches old" );
    MAX_QTY = maxQty;
  }

/**
  * @dev Owner/Delegate sets the minting price.
  */
  function setPrice(uint price) external onlyDelegates{
    require( PRICE != price, "Tiger: New value matches old" );
    PRICE = price;
  }

/**
  * @dev increment and decrement balances based on address from and  to.
  */
  function _beforeTokenTransfer(address from, address to) internal {
    if( from != address(0) )
      --_balances[ from ];

    if( to != address(0) )
      ++_balances[ to ];
  }

/**
  * @dev returns bool if the tokenId exist.
  */
  function _exists(uint tokenId) internal view override returns (bool) {
    return tokenId>0 && tokenId <= moons.length && moons[tokenId-1].owner != address(0);
  }

/**
  * @dev mints token based address and tokenId
  */
  function _mint(address to, uint tokenId) internal {
    _beforeTokenTransfer(address(0), to);
    moons.push(Moon(to,false));
    emit Transfer(address(0), to, tokenId);
  }

/**
    * @dev update the moon type.
    */
  function updateMoontype(bool moonType, uint[] calldata tokenIds ) external onlyDelegates {
        //update logic to update the MoonType
        for(uint i=0; i < tokenIds.length; i++) {
            require(_exists(tokenIds[i]), "Tiger: TokenId not exist");
            moons[tokenIds[i]].celestialType = moonType;
        }
  }

/**
  * @dev returns the moontypes based on the tokenIds.
  */
  function getMoonType(uint[] calldata tokenIds) external view returns(bool[] memory moonTypes) {
      // return moontype true/false
      bool[] memory _moonTypes = new bool[](tokenIds.length);
      for(uint i; i < tokenIds.length; i++) {
        _moonTypes[i] = moons[tokenIds[i]].celestialType;
      }
      return _moonTypes;
  }

/**
  * @dev transfer tokenId to other address.
  */
  function _transfer(address from, address to, uint tokenId) internal override {
    require(moons[tokenId].owner == from, "Tiger: transfer of token that is not owned");

    // Clear approvals from the previous owner
    _approve(address(0), tokenId);
    _beforeTokenTransfer(from, to);

    moons[tokenId].owner = to;
    emit Transfer(from, to, tokenId);
  }

  /**
    * @dev Get the tokens staked by a user
    */
    function getStakedTokens(address _user) public view returns (uint256[] memory tokenIds) {
        Staker storage staker = stakers[_user];
        return staker.stakedTokens[_user]; 
    }

/**
  * @dev Stake the NFT based on array of tokenIds
  */
    function stake( uint[] calldata tokenIds ) external {
        require( isStakeActive, "Tiger: Staking is not active" );
        
        Moon storage moon;
        //Check if TokenIds exist and the moon owner is the msge sender
        for( uint i; i < tokenIds.length; ++i ){
            require( _exists(tokenIds[i]), "Tiger: Query for nonexistent token" );
            moon = moons[ tokenIds[i] ];
            require(moon.owner == msg.sender, "Tiger: Staking token that is not owned");

            _stake(msg.sender, tokenIds[i]);
        }
    }

    /**
    * @dev For internal access to stake the NFT based tokenId
    */
    function _stake( address _user, uint256 _tokenId ) internal {

        Staker storage staker = stakers[_user];

        staker.amountStaked += 1;
        staker.timeStaked[_user] = block.timestamp;
        staker.stakedTokens[_user].push(_tokenId);

        originalStakeOwner[_tokenId] = msg.sender;

        _transfer(_user,address(this), _tokenId);
      
        emit Staked(_user, _tokenId);

        
    }

/**
  * @dev Unstake the token based on array of tokenIds
  */
    function unStake( uint[] calldata tokenIds ) external {
        require( isStakeActive, "Tiger: Staking is not active" );
        //Check if TokenIds exist
        for( uint i; i < tokenIds.length; ++i ){
            require( originalStakeOwner[tokenIds[i]] == msg.sender, 
            "Tiger._unstake: Sender must have staked tokenID");
            _unstake(msg.sender,tokenIds[i]);        
        }
    }

    /**
    * @dev For internal access to unstake the NFT based tokenId
    */
    function _unstake( address _user, uint256 _tokenId) internal {

        Staker storage staker = stakers[_user];

        _removeElement(_user, _tokenId);

        delete originalStakeOwner[_tokenId];
        staker.timeStaked[_user] = block.timestamp;
        staker.amountStaked -= 1;

        if(staker.amountStaked == 0) {
            delete stakers[_user];
        }

        _transfer(address(this),_user, _tokenId);
        
        emit Unstaked(_user, _tokenId);
        
    }

  /**
    * @dev Owner/Delegate sets the Whitelist active flag.
    */
    function setStakeActive( bool isActive_ ) external onlyDelegates {
      require( isStakeActive != isActive_ , "Tiger: New value matches old" );
      isStakeActive = isActive_;
    }

    /**
    *   @notice remove given elements from array
    *   @dev usable only if _array contains unique elements only
     */
    function _removeElement(address _user, uint256 _element) internal {
        Staker storage staker = stakers[_user];
        for (uint256 i; i<staker.stakedTokens[_user].length; i++) {
            if (staker.stakedTokens[_user][i] == _element) {
                staker.stakedTokens[_user][i] = staker.stakedTokens[_user][staker.stakedTokens[_user].length - 1];
                staker.stakedTokens[_user].pop();
                break;
            }
        }
    }
}

File 1 of 16: Address.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

File 2 of 16: Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

File 3 of 16: Delegated.sol
// SPDX-License-Identifier: BSD-3-Clause

pragma solidity ^0.8.0;

/***********************
* @author: squeebo_nft *
************************/

import "./Ownable.sol";

contract Delegated is Ownable {
  mapping(address => bool) internal _delegates;

  constructor(){
    _delegates[owner()] = true;
  }

  modifier onlyDelegates {
    require(_delegates[msg.sender], "Invalid delegate" );
    _;
  }

  //onlyOwner
  function isDelegate( address addr ) external view onlyOwner returns ( bool ){
    return _delegates[addr];
  }

  function setDelegate( address addr, bool isDelegate_ ) external onlyOwner{
    _delegates[addr] = isDelegate_;
  }

  function transferOwnership(address newOwner) public virtual override onlyOwner {
    _delegates[newOwner] = true;
    super.transferOwnership( newOwner );
  }
}

File 4 of 16: ERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

File 5 of 16: ERC721EnumerableT.sol
// SPDX-License-Identifier: BSD-3-Clause

pragma solidity ^0.8.0;

/****************************************
 * @author: squeebo_nft                 *
 ****************************************
 *   Blimpie-ERC721 provides low-gas    *
 *           mints + transfers          *
 ****************************************/

import "./ERC721T.sol";
import "./IERC721Batch.sol";
import "./IERC721Enumerable.sol";

abstract contract ERC721EnumerableT is ERC721T, IERC721Batch, IERC721Enumerable {
    function balanceOf( address owner ) public view virtual override( IERC721, ERC721T ) returns( uint );

    function isOwnerOf( address account, uint[] calldata tokenIds ) external view virtual override returns( bool );

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

    function tokenOfOwnerByIndex(address owner, uint index) public view virtual override returns( uint tokenId );

    function tokenByIndex(uint index) external view virtual override returns (uint) {
        require(index < totalSupply(), "ERC721Enumerable: global index out of bounds");
        return index;
    }

    function totalSupply() public view virtual override returns( uint );

    function transferBatch( address from, address to, uint[] calldata tokenIds, bytes calldata data ) external override{
        for(uint i; i < tokenIds.length; ++i ){
            safeTransferFrom( from, to, tokenIds[i], data );
        }
    }

    function walletOfOwner( address account ) external view virtual override returns( uint[] memory ){
        uint quantity = balanceOf( account );
        uint[] memory wallet = new uint[]( quantity );
        for( uint i; i < quantity; ++i ){
            wallet[i] = tokenOfOwnerByIndex( account, i );
        }
        return wallet;
    }
}

File 6 of 16: ERC721T.sol
// SPDX-License-Identifier: BSD-3-Clause

pragma solidity ^0.8.0;

/****************************************
 * @author: squeebo_nft                 *
 * @team:   GoldenX                     *
 ****************************************
 *   Blimpie-ERC721 provides low-gas    *
 *           mints + transfers          *
 ****************************************/

import "./IERC721.sol";
import "./IERC721Receiver.sol";
import "./IERC721Metadata.sol";
import "./Address.sol";
import "./Context.sol";
import "./ERC165.sol";

abstract contract ERC721T is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;

    string private _name;
    string private _symbol;

    mapping(uint => address) internal _tokenApprovals;
    mapping(address => mapping(address => bool)) internal _operatorApprovals;

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

    //public
    function balanceOf(address owner) public view virtual override returns( uint );

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

    function ownerOf(uint tokenId) public view virtual override returns (address);

    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 symbol() external view virtual override returns (string memory) {
        return _symbol;
    }

    /*
    function totalSupply() public view virtual returns (uint) {
        return _owners.length - (_offset + _burned);
    }
    */


    function approve(address to, uint tokenId) external virtual override {
        address owner = 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(uint tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");
        return _tokenApprovals[tokenId];
    }

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

    function setApprovalForAll(address operator, bool approved) external virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");
        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

    function transferFrom(
        address from,
        address to,
        uint tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _transfer(from, to, tokenId);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint tokenId
    ) external virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

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


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

    function _checkOnERC721Received(
        address from,
        address to,
        uint 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 _exists(uint tokenId) internal view virtual returns (bool);

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

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

    function _transfer(address from, address to, uint tokenId) internal virtual;
}

File 7 of 16: IERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

File 8 of 16: IERC721.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./ERC165.sol";

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

File 9 of 16: IERC721Batch.sol
// SPDX-License-Identifier: BSD-3-Clause

pragma solidity ^0.8.0;

interface IERC721Batch {
  function isOwnerOf( address account, uint[] calldata tokenIds ) external view returns( bool );
  function transferBatch( address from, address to, uint[] calldata tokenIds, bytes calldata data ) external;
  function walletOfOwner( address account ) external view returns( uint[] memory );
}

File 10 of 16: IERC721Enumerable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC721.sol";

/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

File 11 of 16: IERC721Metadata.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC721.sol";

/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

File 12 of 16: IERC721Receiver.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}   

File 13 of 16: Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_msgSender());
    }

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

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

File 14 of 16: ReentrancyGuard.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

File 15 of 16: Strings.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

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

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Staked","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Unstaked","type":"event"},{"inputs":[],"name":"MAX_QTY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"accessList","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBalanceofContract","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"getMoonType","outputs":[{"internalType":"bool[]","name":"moonTypes","type":"bool[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getStakedTokens","outputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isDelegate","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isMintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"isOwnerOf","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isStakeActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isWhitelistActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintNum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"moons","outputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"bool","name":"celestialType","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"originalStakeOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","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":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"prefix","type":"string"},{"internalType":"string","name":"suffix","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"isDelegate_","type":"bool"}],"name":"setDelegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxQty","type":"uint256"}],"name":"setMaxQty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"mintActive_","type":"bool"}],"name":"setMintingActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"reveal_","type":"bool"}],"name":"setRevealState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isActive_","type":"bool"}],"name":"setStakeActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isWhitelistActive_","type":"bool"}],"name":"setWhitelistActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256","name":"allowed","type":"uint256"}],"name":"setWhitelistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakers","outputs":[{"internalType":"uint256","name":"amountStaked","type":"uint256"}],"stateMutability":"view","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":"quantity","type":"uint256[]"},{"internalType":"address[]","name":"recipient","type":"address[]"}],"name":"team_mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"totalSupply_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"transferBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"unStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"moonType","type":"bool"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"updateMoontype","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","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":"nonpayable","type":"function"}]

6009805460ff19908116909155611388600a5566b1a2bc2ec50000600b556002600c55600e805461ffff1916905560118054909116905560e0604052603660808181529062003df160a03980516200006091601391602090910190620001d9565b5060408051808201909152600580825264173539b7b760d91b60209092019182526200008f91601491620001d9565b503480156200009d57600080fd5b5060408051808201825260118152702a34b3b2b9102a34b3b2b9102a34b3b2b960791b60208083019182528351808501909452600f84526e2a34b3b2b92a34b3b2b92a34b3b2b960891b908401528151919291620000fe91600091620001d9565b50805162000114906001906020840190620001d9565b505050620001316200012b6200017460201b60201c565b62000178565b60016005600062000141620001ca565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556001600655620002bc565b3390565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6004546001600160a01b031690565b828054620001e7906200027f565b90600052602060002090601f0160209004810192826200020b576000855562000256565b82601f106200022657805160ff191683800117855562000256565b8280016001018555821562000256579182015b828111156200025657825182559160200191906001019062000239565b506200026492915062000268565b5090565b5b8082111562000264576000815560010162000269565b6002810460018216806200029457607f821691505b60208210811415620002b657634e487b7160e01b600052602260045260246000fd5b50919050565b613b2580620002cc6000396000f3fe6080604052600436106103355760003560e01c806363c28db1116101ab578063a0712d68116100f7578063c3b754dc11610095578063d04ef2851161006f578063d04ef28514610945578063e985e9c514610965578063f2fde38b14610985578063fd4444c3146109a557610335565b8063c3b754dc146108e5578063c87b56dd14610905578063d01be3d01461092557610335565b8063abe8d620116100d1578063abe8d62014610865578063b10dcc9314610885578063b534a5c4146108a5578063b88d4fde146108c557610335565b8063a0712d6814610805578063a22cb46514610818578063aae4ff941461083857610335565b806387a5b67c116101645780638da5cb5b1161013e5780638da5cb5b1461079b5780639168ae72146107b057806391b7f5ed146107d057806395d89b41146107f057610335565b806387a5b67c146107465780638b2e9809146107665780638d859f3e1461078657610335565b806363c28db1146106915780636790a9de146106b15780636f8b44b0146106d157806370a08231146106f1578063715018a6146107115780637c0ba74f1461072657610335565b806332cb6b0c116102855780634f6ccce7116102235780635b92ac0d116101fd5780635b92ac0d146106275780635ecc02221461063c5780635ff162ca146106515780636352211e1461067157610335565b80634f6ccce7146105dd57806351830227146105fd578063524513d61461061257610335565b806345a15d641161025f57806345a15d641461055a5780634a994eef1461056f5780634d44660c1461058f5780634ee6bb23146105af57610335565b806332cb6b0c146104f857806342842e0e1461050d578063438b63001461052d57610335565b80630fbf0a93116102f257806323b872dd116102cc57806323b872dd14610478578063272ff248146104985780632e1a7d4d146104b85780632f745c59146104d857610335565b80630fbf0a931461042157806318160ddd146104415780631c96cae91461046357610335565b806301ffc9a71461033a57806306fdde03146103705780630777962714610392578063081812fc146103b2578063095ea7b3146103df5780630d84d1b114610401575b600080fd5b34801561034657600080fd5b5061035a610355366004612e96565b6109c5565b604051610367919061313f565b60405180910390f35b34801561037c57600080fd5b506103856109f2565b604051610367919061314a565b34801561039e57600080fd5b5061035a6103ad366004612ad4565b610a84565b3480156103be57600080fd5b506103d26103cd366004612f2a565b610aed565b604051610367919061303c565b3480156103eb57600080fd5b506103ff6103fa366004612d2c565b610b30565b005b34801561040d57600080fd5b506103d261041c366004612f2a565b610bc8565b34801561042d57600080fd5b506103ff61043c366004612d9e565b610be3565b34801561044d57600080fd5b50610456610d20565b6040516103679190613992565b34801561046f57600080fd5b50610456610d26565b34801561048457600080fd5b506103ff610493366004612bad565b610d2c565b3480156104a457600080fd5b506103ff6104b3366004612f2a565b610d64565b3480156104c457600080fd5b506103ff6104d3366004612f2a565b610dba565b3480156104e457600080fd5b506104566104f3366004612d2c565b610e8d565b34801561050457600080fd5b50610456610f32565b34801561051957600080fd5b506103ff610528366004612bad565b610f38565b34801561053957600080fd5b5061054d610548366004612ad4565b610f53565b6040516103679190613107565b34801561056657600080fd5b5061035a61100e565b34801561057b57600080fd5b506103ff61058a366004612d03565b611017565b34801561059b57600080fd5b5061035a6105aa366004612cb3565b611081565b3480156105bb57600080fd5b506105cf6105ca366004612f2a565b61111f565b60405161036792919061308d565b3480156105e957600080fd5b506104566105f8366004612f2a565b611154565b34801561060957600080fd5b5061035a611181565b34801561061e57600080fd5b5061035a61118a565b34801561063357600080fd5b5061035a611193565b34801561064857600080fd5b506104566111a1565b34801561065d57600080fd5b506103ff61066c366004612e45565b6111a5565b34801561067d57600080fd5b506103d261068c366004612f2a565b611210565b34801561069d57600080fd5b5061054d6106ac366004612ad4565b611272565b3480156106bd57600080fd5b506103ff6106cc366004612ece565b6112e5565b3480156106dd57600080fd5b506103ff6106ec366004612f2a565b611334565b3480156106fd57600080fd5b5061045661070c366004612ad4565b6113b1565b34801561071d57600080fd5b506103ff6113f5565b34801561073257600080fd5b506103ff610741366004612ddd565b611440565b34801561075257600080fd5b50610456610761366004612ad4565b6115ca565b34801561077257600080fd5b506103ff610781366004612e45565b6115dc565b34801561079257600080fd5b5061045661161e565b3480156107a757600080fd5b506103d2611624565b3480156107bc57600080fd5b506104566107cb366004612ad4565b611633565b3480156107dc57600080fd5b506103ff6107eb366004612f2a565b611648565b3480156107fc57600080fd5b5061038561169e565b6103ff610813366004612f2a565b6116ad565b34801561082457600080fd5b506103ff610833366004612d03565b61188e565b34801561084457600080fd5b50610858610853366004612d9e565b61195c565b60405161036791906130c1565b34801561087157600080fd5b506103ff610880366004612e5f565b611a61565b34801561089157600080fd5b506103ff6108a0366004612d9e565b611b59565b3480156108b157600080fd5b506103ff6108c0366004612b20565b611c2b565b3480156108d157600080fd5b506103ff6108e0366004612be8565b611cae565b3480156108f157600080fd5b506103ff610900366004612e45565b611ce7565b34801561091157600080fd5b50610385610920366004612f2a565b611d52565b34801561093157600080fd5b506103ff610940366004612d55565b611dae565b34801561095157600080fd5b506103ff610960366004612e45565b611e4c565b34801561097157600080fd5b5061035a610980366004612aee565b611ec4565b34801561099157600080fd5b506103ff6109a0366004612ad4565b611ef2565b3480156109b157600080fd5b506104566109c0366004612ad4565b611f60565b60006001600160e01b0319821663780e9d6360e01b14806109ea57506109ea82611f72565b90505b919050565b606060008054610a0190613a2d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2d90613a2d565b8015610a7a5780601f10610a4f57610100808354040283529160200191610a7a565b820191906000526020600020905b815481529060010190602001808311610a5d57829003601f168201915b5050505050905090565b6000610a8e611fb2565b6001600160a01b0316610a9f611624565b6001600160a01b031614610ace5760405162461bcd60e51b8152600401610ac59061364c565b60405180910390fd5b506001600160a01b031660009081526005602052604090205460ff1690565b6000610af882611fb6565b610b145760405162461bcd60e51b8152600401610ac590613600565b506000908152600260205260409020546001600160a01b031690565b6000610b3b82611210565b9050806001600160a01b0316836001600160a01b03161415610b6f5760405162461bcd60e51b8152600401610ac590613720565b806001600160a01b0316610b81611fb2565b6001600160a01b03161480610b9d5750610b9d81610980611fb2565b610bb95760405162461bcd60e51b8152600401610ac59061356e565b610bc3838361201a565b505050565b6008602052600090815260409020546001600160a01b031681565b60115460ff16610c055760405162461bcd60e51b8152600401610ac5906134a4565b6000805b82811015610d1a57610c40848483818110610c3457634e487b7160e01b600052603260045260246000fd5b90506020020135611fb6565b610c5c5760405162461bcd60e51b8152600401610ac5906132d8565b600d848483818110610c7e57634e487b7160e01b600052603260045260246000fd5b9050602002013581548110610ca357634e487b7160e01b600052603260045260246000fd5b600091825260209091200180549092506001600160a01b03163314610cda5760405162461bcd60e51b8152600401610ac5906137d9565b610d0a33858584818110610cfe57634e487b7160e01b600052603260045260246000fd5b90506020020135612088565b610d1381613a68565b9050610c09565b50505050565b600d5490565b600c5481565b610d3d610d37611fb2565b82612156565b610d595760405162461bcd60e51b8152600401610ac590613868565b610bc38383836121db565b3360009081526005602052604090205460ff16610d935760405162461bcd60e51b8152600401610ac59061315d565b80600c541415610db55760405162461bcd60e51b8152600401610ac590613187565b600c55565b610dc2611fb2565b6001600160a01b0316610dd3611624565b6001600160a01b031614610df95760405162461bcd60e51b8152600401610ac59061364c565b80471015610e195760405162461bcd60e51b8152600401610ac590613421565b6000610e23611624565b6001600160a01b031682604051610e3990613039565b60006040518083038185875af1925050503d8060008114610e76576040519150601f19603f3d011682016040523d82523d6000602084013e610e7b565b606091505b5050905080610e8957600080fd5b5050565b60008060015b600d548111610f1357600d610ea96001836139d3565b81548110610ec757634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0386811691161415610f035783821415610ef7579150610f2c9050565b610f0082613a68565b91505b610f0c81613a68565b9050610e93565b5060405162461bcd60e51b8152600401610ac5906131f5565b92915050565b600a5481565b610bc383838360405180602001604052806000815250611cae565b60606000610f60836113b1565b90506000816001600160401b03811115610f8a57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610fb3578160200160208202803683370190505b50905060005b8281101561100657610fcb8582610e8d565b828281518110610feb57634e487b7160e01b600052603260045260246000fd5b6020908102919091010152610fff81613a68565b9050610fb9565b509392505050565b60115460ff1681565b61101f611fb2565b6001600160a01b0316611030611624565b6001600160a01b0316146110565760405162461bcd60e51b8152600401610ac59061364c565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000805b8281101561111257846001600160a01b0316600d8585848181106110b957634e487b7160e01b600052603260045260246000fd5b90506020020135815481106110de57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031614611102576000915050611118565b61110b81613a68565b9050611085565b50600190505b9392505050565b600d818154811061112f57600080fd5b6000918252602090912001546001600160a01b0381169150600160a01b900460ff1682565b600061115e610d20565b82111561117d5760405162461bcd60e51b8152600401610ac590613360565b5090565b60095460ff1681565b600e5460ff1681565b600e54610100900460ff1681565b4790565b3360009081526005602052604090205460ff166111d45760405162461bcd60e51b8152600401610ac59061315d565b60115460ff16151581151514156111fd5760405162461bcd60e51b8152600401610ac590613187565b6011805460ff1916911515919091179055565b600080600d6112206001856139d3565b8154811061123e57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03169050806109ea5760405162461bcd60e51b8152600401610ac5906134db565b6001600160a01b0381166000908152600760209081526040808320808352928190208054825181850281018501909352808352606094938301828280156112d857602002820191906000526020600020905b8154815260200190600101908083116112c4575b5050505050915050919050565b3360009081526005602052604090205460ff166113145760405162461bcd60e51b8152600401610ac59061315d565b61132060138585612996565b5061132d60148383612996565b5050505050565b3360009081526005602052604090205460ff166113635760405162461bcd60e51b8152600401610ac59061315d565b80600a5414156113855760405162461bcd60e51b8152600401610ac590613187565b61138d610d20565b8110156113ac5760405162461bcd60e51b8152600401610ac590613681565b600a55565b60006001600160a01b0382166113d95760405162461bcd60e51b8152600401610ac59061381f565b506001600160a01b031660009081526012602052604090205490565b6113fd611fb2565b6001600160a01b031661140e611624565b6001600160a01b0316146114345760405162461bcd60e51b8152600401610ac59061364c565b61143e60006122c9565b565b3360009081526005602052604090205460ff1661146f5760405162461bcd60e51b8152600401610ac59061315d565b82811461148e5760405162461bcd60e51b8152600401610ac5906138f0565b600080611499610d20565b905060005b858110156114ea578686828181106114c657634e487b7160e01b600052603260045260246000fd5b90506020020135836114d891906139a7565b92506114e381613a68565b905061149e565b50600a546114f883836139a7565b106115155760405162461bcd60e51b8152600401610ac5906137a4565b60005b838110156115c15760005b87878381811061154357634e487b7160e01b600052603260045260246000fd5b905060200201358110156115b057600061155c84613a68565b935083905061159f87878581811061158457634e487b7160e01b600052603260045260246000fd5b90506020020160208101906115999190612ad4565b8261231b565b506115a981613a68565b9050611523565b506115ba81613a68565b9050611518565b50505050505050565b60106020526000908152604090205481565b3360009081526005602052604090205460ff1661160b5760405162461bcd60e51b8152600401610ac59061315d565b6009805460ff1916911515919091179055565b600b5481565b6004546001600160a01b031690565b60076020526000908152604090206002015481565b3360009081526005602052604090205460ff166116775760405162461bcd60e51b8152600401610ac59061315d565b80600b5414156116995760405162461bcd60e51b8152600401610ac590613187565b600b55565b606060018054610a0190613a2d565b600260065414156116d05760405162461bcd60e51b8152600401610ac5906138b9565b6002600655600e5460ff6101009091041615156001146117025760405162461bcd60e51b8152600401610ac590613761565b600e5460ff1615611766573360009081526010602052604090205481111561173c5760405162461bcd60e51b8152600401610ac5906133a1565b336000908152601060205260408120805483929061175b9084906139d3565b909155506117e89050565b600c54336000908152600f60205260409020546117849083906139a7565b11156117a25760405162461bcd60e51b8152600401610ac59061351d565b336000908152600f60205260409020546001906117c09083906139a7565b11156117e857600b543410156117e85760405162461bcd60e51b8152600401610ac5906135cb565b60006117f2610d20565b600a5490915061180283836139a7565b11156118205760405162461bcd60e51b8152600401610ac5906137a4565b336000908152600f602052604090205461183b9083906139a7565b336000908152600f60205260408120919091555b8281101561188457600061186283613a68565b9250829050611871338261231b565b508061187c81613a68565b91505061184f565b5050600160065550565b611896611fb2565b6001600160a01b0316826001600160a01b031614156118c75760405162461bcd60e51b8152600401610ac5906133ea565b80600360006118d4611fb2565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155611918611fb2565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611950919061313f565b60405180910390a35050565b60606000826001600160401b0381111561198657634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156119af578160200160208202803683370190505b50905060005b8381101561100657600d8585838181106119df57634e487b7160e01b600052603260045260246000fd5b9050602002013581548110611a0457634e487b7160e01b600052603260045260246000fd5b9060005260206000200160000160149054906101000a900460ff16828281518110611a3f57634e487b7160e01b600052603260045260246000fd5b9115156020928302919091019091015280611a5981613a68565b9150506119b5565b3360009081526005602052604090205460ff16611a905760405162461bcd60e51b8152600401610ac59061315d565b60005b81811015610d1a57611abe838383818110610c3457634e487b7160e01b600052603260045260246000fd5b611ada5760405162461bcd60e51b8152600401610ac5906131be565b83600d848484818110611afd57634e487b7160e01b600052603260045260246000fd5b9050602002013581548110611b2257634e487b7160e01b600052603260045260246000fd5b60009182526020909120018054911515600160a01b0260ff60a01b1990921691909117905580611b5181613a68565b915050611a93565b60115460ff16611b7b5760405162461bcd60e51b8152600401610ac5906134a4565b60005b81811015610bc3573360086000858585818110611bab57634e487b7160e01b600052603260045260246000fd5b60209081029290920135835250810191909152604001600020546001600160a01b031614611beb5760405162461bcd60e51b8152600401610ac590613943565b611c1b33848484818110611c0f57634e487b7160e01b600052603260045260246000fd5b905060200201356123d8565b611c2481613a68565b9050611b7e565b60005b838110156115c157611c9e8787878785818110611c5b57634e487b7160e01b600052603260045260246000fd5b9050602002013586868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611cae92505050565b611ca781613a68565b9050611c2e565b611cbf611cb9611fb2565b83612156565b611cdb5760405162461bcd60e51b8152600401610ac590613868565b610d1a848484846124ae565b3360009081526005602052604090205460ff16611d165760405162461bcd60e51b8152600401610ac59061315d565b600e5460ff1615158115151415611d3f5760405162461bcd60e51b8152600401610ac590613187565b600e805460ff1916911515919091179055565b6060611d5d82611fb6565b611d795760405162461bcd60e51b8152600401610ac590613240565b6013611d84836124e1565b6014604051602001611d9893929190613006565b6040516020818303038152906040529050919050565b3360009081526005602052604090205460ff16611ddd5760405162461bcd60e51b8152600401610ac59061315d565b60005b82811015610d1a578160106000868685818110611e0d57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611e229190612ad4565b6001600160a01b03168152602081019190915260400160002055611e4581613a68565b9050611de0565b3360009081526005602052604090205460ff16611e7b5760405162461bcd60e51b8152600401610ac59061315d565b600e5460ff6101009091041615158115151415611eaa5760405162461bcd60e51b8152600401610ac590613187565b600e80549115156101000261ff0019909216919091179055565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205460ff1690565b611efa611fb2565b6001600160a01b0316611f0b611624565b6001600160a01b031614611f315760405162461bcd60e51b8152600401610ac59061364c565b6001600160a01b0381166000908152600560205260409020805460ff19166001179055611f5d816125fb565b50565b600f6020526000908152604090205481565b60006001600160e01b031982166380ac58cd60e01b1480611fa357506001600160e01b03198216635b5e139f60e01b145b806109ea57506109ea82612669565b3390565b60008082118015611fc95750600d548211155b80156109ea57506000600d611fdf6001856139d3565b81548110611ffd57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316141592915050565b600081815260026020526040902080546001600160a01b0319166001600160a01b038416908117909155819061204f82611210565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6001600160a01b038216600090815260076020526040812060028101805491926001926120b69084906139a7565b90915550506001600160a01b038316600090815260018083016020908152604080842042905584825280842080549384018155845281842090920185905584835260089052902080546001600160a01b031916331790556121188330846121db565b7f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d83836040516121499291906130a8565b60405180910390a1505050565b600061216182611fb6565b61217d5760405162461bcd60e51b8152600401610ac590613458565b600061218883611210565b9050806001600160a01b0316846001600160a01b031614806121c35750836001600160a01b03166121b884610aed565b6001600160a01b0316145b806121d357506121d38185611ec4565b949350505050565b826001600160a01b0316600d828154811061220657634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316146122385760405162461bcd60e51b8152600401610ac5906136d6565b61224360008261201a565b61224d8383612682565b81600d828154811061226f57634e487b7160e01b600052603260045260246000fd5b6000918252602082200180546001600160a01b0319166001600160a01b03938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b612326600083612682565b6040805180820182526001600160a01b03808516808352600060208401818152600d805460018101825590835294517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb5909501805491511515600160a01b0260ff60a01b19969095166001600160a01b031990921691909117949094169290921790925591518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6001600160a01b03821660009081526007602052604090206123fa83836126f9565b600082815260086020908152604080832080546001600160a01b03191690556001600160a01b038616835260018481019092528220429055600283018054919290916124479084906139d3565b90915550506002810154612472576001600160a01b0383166000908152600760205260408120600201555b61247d3084846121db565b7f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f7583836040516121499291906130a8565b6124b98484846121db565b6124c584848484612875565b610d1a5760405162461bcd60e51b8152600401610ac590613286565b60608161250657506040805180820190915260018152600360fc1b60208201526109ed565b8160005b8115612530578061251a81613a68565b91506125299050600a836139bf565b915061250a565b6000816001600160401b0381111561255857634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612582576020820181803683370190505b5090505b84156121d3576125976001836139d3565b91506125a4600a86613a83565b6125af9060306139a7565b60f81b8183815181106125d257634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506125f4600a866139bf565b9450612586565b612603611fb2565b6001600160a01b0316612614611624565b6001600160a01b03161461263a5760405162461bcd60e51b8152600401610ac59061364c565b6001600160a01b0381166126605760405162461bcd60e51b8152600401610ac59061331a565b611f5d816122c9565b6001600160e01b031981166301ffc9a760e01b14919050565b6001600160a01b038216156126bc576001600160a01b038216600090815260126020526040812080549091906126b790613a16565b909155505b6001600160a01b03811615610e89576001600160a01b038116600090815260126020526040812080549091906126f190613a68565b909155505050565b6001600160a01b0382166000908152600760205260408120905b6001600160a01b038416600090815260208390526040902054811015610d1a576001600160a01b038416600090815260208390526040902080548491908390811061276e57634e487b7160e01b600052603260045260246000fd5b90600052602060002001541415612863576001600160a01b038416600090815260208390526040902080546127a5906001906139d3565b815481106127c357634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b038716835290849052604090912080548390811061280657634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101929092556001600160a01b0386168152908390526040902080548061284857634e487b7160e01b600052603160045260246000fd5b60019003818190600052602060002001600090559055610d1a565b8061286d81613a68565b915050612713565b6000612889846001600160a01b0316612990565b1561298557836001600160a01b031663150b7a026128a5611fb2565b8786866040518563ffffffff1660e01b81526004016128c79493929190613050565b602060405180830381600087803b1580156128e157600080fd5b505af1925050508015612911575060408051601f3d908101601f1916820190925261290e91810190612eb2565b60015b61296b573d80801561293f576040519150601f19603f3d011682016040523d82523d6000602084013e612944565b606091505b5080516129635760405162461bcd60e51b8152600401610ac590613286565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506121d3565b506001949350505050565b3b151590565b8280546129a290613a2d565b90600052602060002090601f0160209004810192826129c45760008555612a0a565b82601f106129dd5782800160ff19823516178555612a0a565b82800160010185558215612a0a579182015b82811115612a0a5782358255916020019190600101906129ef565b5061117d9291505b8082111561117d5760008155600101612a12565b80356001600160a01b03811681146109ed57600080fd5b60008083601f840112612a4e578081fd5b5081356001600160401b03811115612a64578182fd5b6020830191508360208083028501011115612a7e57600080fd5b9250929050565b803580151581146109ed57600080fd5b60008083601f840112612aa6578182fd5b5081356001600160401b03811115612abc578182fd5b602083019150836020828501011115612a7e57600080fd5b600060208284031215612ae5578081fd5b61111882612a26565b60008060408385031215612b00578081fd5b612b0983612a26565b9150612b1760208401612a26565b90509250929050565b60008060008060008060808789031215612b38578182fd5b612b4187612a26565b9550612b4f60208801612a26565b945060408701356001600160401b0380821115612b6a578384fd5b612b768a838b01612a3d565b90965094506060890135915080821115612b8e578384fd5b50612b9b89828a01612a95565b979a9699509497509295939492505050565b600080600060608486031215612bc1578283fd5b612bca84612a26565b9250612bd860208501612a26565b9150604084013590509250925092565b60008060008060808587031215612bfd578384fd5b612c0685612a26565b93506020612c15818701612a26565b93506040860135925060608601356001600160401b0380821115612c37578384fd5b818801915088601f830112612c4a578384fd5b813581811115612c5c57612c5c613ac3565b604051601f8201601f1916810185018381118282101715612c7f57612c7f613ac3565b60405281815283820185018b1015612c95578586fd5b81858501868301379081019093019390935250939692955090935050565b600080600060408486031215612cc7578283fd5b612cd084612a26565b925060208401356001600160401b03811115612cea578283fd5b612cf686828701612a3d565b9497909650939450505050565b60008060408385031215612d15578182fd5b612d1e83612a26565b9150612b1760208401612a85565b60008060408385031215612d3e578182fd5b612d4783612a26565b946020939093013593505050565b600080600060408486031215612d69578283fd5b83356001600160401b03811115612d7e578384fd5b612d8a86828701612a3d565b909790965060209590950135949350505050565b60008060208385031215612db0578182fd5b82356001600160401b03811115612dc5578283fd5b612dd185828601612a3d565b90969095509350505050565b60008060008060408587031215612df2578182fd5b84356001600160401b0380821115612e08578384fd5b612e1488838901612a3d565b90965094506020870135915080821115612e2c578384fd5b50612e3987828801612a3d565b95989497509550505050565b600060208284031215612e56578081fd5b61111882612a85565b600080600060408486031215612e73578081fd5b612e7c84612a85565b925060208401356001600160401b03811115612cea578182fd5b600060208284031215612ea7578081fd5b813561111881613ad9565b600060208284031215612ec3578081fd5b815161111881613ad9565b60008060008060408587031215612ee3578182fd5b84356001600160401b0380821115612ef9578384fd5b612f0588838901612a95565b90965094506020870135915080821115612f1d578384fd5b50612e3987828801612a95565b600060208284031215612f3b578081fd5b5035919050565b60008151808452612f5a8160208601602086016139ea565b601f01601f19169290920160200192915050565b805460009060028104600180831680612f8857607f831692505b6020808410821415612fa857634e487b7160e01b86526022600452602486fd5b818015612fbc5760018114612fcd57612ffa565b60ff19861689528489019650612ffa565b612fd68861399b565b60005b86811015612ff25781548b820152908501908301612fd9565b505084890196505b50505050505092915050565b60006130128286612f6e565b84516130228183602089016139ea565b61302e81830186612f6e565b979650505050505050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061308390830184612f42565b9695505050505050565b6001600160a01b039290921682521515602082015260400190565b6001600160a01b03929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b818110156130fb5783511515835292840192918401916001016130dd565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156130fb57835183529284019291840191600101613123565b901515815260200190565b6000602082526111186020830184612f42565b60208082526010908201526f496e76616c69642064656c656761746560801b604082015260600190565b6020808252601c908201527f54696765723a204e65772076616c7565206d617463686573206f6c6400000000604082015260600190565b60208082526018908201527f54696765723a20546f6b656e4964206e6f742065786973740000000000000000604082015260600190565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b60208082526026908201527f54696765723a2055524920717565727920666f72206e6f6e6578697374656e74604082015265103a37b5b2b760d11b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526022908201527f54696765723a20517565727920666f72206e6f6e6578697374656e7420746f6b60408201526132b760f11b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526021908201527f54696765723a20676c6f62616c20696e646578206f7574206f6620626f756e646040820152607360f81b606082015260800190565b60208082526029908201527f54696765723a204163636f756e74206973206c657373207468616e20746865206040820152681c5d1e481b1a5b5a5d60ba1b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b6020808252601d908201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252601c908201527f54696765723a205374616b696e67206973206e6f742061637469766500000000604082015260600190565b60208082526022908201527f54696765723a20717565727920666f72206e6f6e6578697374656e7420746f6b60408201526132b760f11b606082015260800190565b60208082526031908201527f54696765723a5175616e74697479206d757374206265206c657373207468616e604082015270206f7220657175616c204d41585f51545960781b606082015260800190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252818101527f54696765723a2045746865722073656e74206973206e6f7420636f7272656374604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526035908201527f54696765723a2053706563696669656420737570706c79206973206c6f776572604082015274207468616e2063757272656e742062616c616e636560581b606082015260800190565b6020808252602a908201527f54696765723a207472616e73666572206f6620746f6b656e2074686174206973604082015269081b9bdd081bdddb995960b21b606082015260800190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b60208082526023908201527f54696765723a204d696e74696e67206e6565647320746f20626520656e61626c60408201526232b21760e91b606082015260800190565b6020808252818101527f54696765723a204d696e742f6f72646572206578636565647320737570706c79604082015260600190565b60208082526026908201527f54696765723a205374616b696e6720746f6b656e2074686174206973206e6f74604082015265081bdddb995960d21b606082015260800190565b60208082526029908201527f54696765723a2062616c616e636520717565727920666f7220746865207a65726040820152686f206164647265737360b81b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526033908201527f54696765723a204d7573742070726f7669646520657175616c207175616e74696040820152727469657320616e6420726563697069656e747360681b606082015260800190565b6020808252602f908201527f54696765722e5f756e7374616b653a2053656e646572206d757374206861766560408201526e081cdd185ad959081d1bdad95b9251608a1b606082015260800190565b90815260200190565b60009081526020902090565b600082198211156139ba576139ba613a97565b500190565b6000826139ce576139ce613aad565b500490565b6000828210156139e5576139e5613a97565b500390565b60005b83811015613a055781810151838201526020016139ed565b83811115610d1a5750506000910152565b600081613a2557613a25613a97565b506000190190565b600281046001821680613a4157607f821691505b60208210811415613a6257634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613a7c57613a7c613a97565b5060010190565b600082613a9257613a92613aad565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114611f5d57600080fdfea2646970667358221220ba44ad10da173e35bddca1dd61fc16c1c5f99097bbcfe2dbf04fa6586cd7aa5764736f6c63430008000033697066733a2f2f516d576e395733794e37376776573233776672426458396131424735656a36756743755144527a45736233374b472f

Deployed Bytecode

0x6080604052600436106103355760003560e01c806363c28db1116101ab578063a0712d68116100f7578063c3b754dc11610095578063d04ef2851161006f578063d04ef28514610945578063e985e9c514610965578063f2fde38b14610985578063fd4444c3146109a557610335565b8063c3b754dc146108e5578063c87b56dd14610905578063d01be3d01461092557610335565b8063abe8d620116100d1578063abe8d62014610865578063b10dcc9314610885578063b534a5c4146108a5578063b88d4fde146108c557610335565b8063a0712d6814610805578063a22cb46514610818578063aae4ff941461083857610335565b806387a5b67c116101645780638da5cb5b1161013e5780638da5cb5b1461079b5780639168ae72146107b057806391b7f5ed146107d057806395d89b41146107f057610335565b806387a5b67c146107465780638b2e9809146107665780638d859f3e1461078657610335565b806363c28db1146106915780636790a9de146106b15780636f8b44b0146106d157806370a08231146106f1578063715018a6146107115780637c0ba74f1461072657610335565b806332cb6b0c116102855780634f6ccce7116102235780635b92ac0d116101fd5780635b92ac0d146106275780635ecc02221461063c5780635ff162ca146106515780636352211e1461067157610335565b80634f6ccce7146105dd57806351830227146105fd578063524513d61461061257610335565b806345a15d641161025f57806345a15d641461055a5780634a994eef1461056f5780634d44660c1461058f5780634ee6bb23146105af57610335565b806332cb6b0c146104f857806342842e0e1461050d578063438b63001461052d57610335565b80630fbf0a93116102f257806323b872dd116102cc57806323b872dd14610478578063272ff248146104985780632e1a7d4d146104b85780632f745c59146104d857610335565b80630fbf0a931461042157806318160ddd146104415780631c96cae91461046357610335565b806301ffc9a71461033a57806306fdde03146103705780630777962714610392578063081812fc146103b2578063095ea7b3146103df5780630d84d1b114610401575b600080fd5b34801561034657600080fd5b5061035a610355366004612e96565b6109c5565b604051610367919061313f565b60405180910390f35b34801561037c57600080fd5b506103856109f2565b604051610367919061314a565b34801561039e57600080fd5b5061035a6103ad366004612ad4565b610a84565b3480156103be57600080fd5b506103d26103cd366004612f2a565b610aed565b604051610367919061303c565b3480156103eb57600080fd5b506103ff6103fa366004612d2c565b610b30565b005b34801561040d57600080fd5b506103d261041c366004612f2a565b610bc8565b34801561042d57600080fd5b506103ff61043c366004612d9e565b610be3565b34801561044d57600080fd5b50610456610d20565b6040516103679190613992565b34801561046f57600080fd5b50610456610d26565b34801561048457600080fd5b506103ff610493366004612bad565b610d2c565b3480156104a457600080fd5b506103ff6104b3366004612f2a565b610d64565b3480156104c457600080fd5b506103ff6104d3366004612f2a565b610dba565b3480156104e457600080fd5b506104566104f3366004612d2c565b610e8d565b34801561050457600080fd5b50610456610f32565b34801561051957600080fd5b506103ff610528366004612bad565b610f38565b34801561053957600080fd5b5061054d610548366004612ad4565b610f53565b6040516103679190613107565b34801561056657600080fd5b5061035a61100e565b34801561057b57600080fd5b506103ff61058a366004612d03565b611017565b34801561059b57600080fd5b5061035a6105aa366004612cb3565b611081565b3480156105bb57600080fd5b506105cf6105ca366004612f2a565b61111f565b60405161036792919061308d565b3480156105e957600080fd5b506104566105f8366004612f2a565b611154565b34801561060957600080fd5b5061035a611181565b34801561061e57600080fd5b5061035a61118a565b34801561063357600080fd5b5061035a611193565b34801561064857600080fd5b506104566111a1565b34801561065d57600080fd5b506103ff61066c366004612e45565b6111a5565b34801561067d57600080fd5b506103d261068c366004612f2a565b611210565b34801561069d57600080fd5b5061054d6106ac366004612ad4565b611272565b3480156106bd57600080fd5b506103ff6106cc366004612ece565b6112e5565b3480156106dd57600080fd5b506103ff6106ec366004612f2a565b611334565b3480156106fd57600080fd5b5061045661070c366004612ad4565b6113b1565b34801561071d57600080fd5b506103ff6113f5565b34801561073257600080fd5b506103ff610741366004612ddd565b611440565b34801561075257600080fd5b50610456610761366004612ad4565b6115ca565b34801561077257600080fd5b506103ff610781366004612e45565b6115dc565b34801561079257600080fd5b5061045661161e565b3480156107a757600080fd5b506103d2611624565b3480156107bc57600080fd5b506104566107cb366004612ad4565b611633565b3480156107dc57600080fd5b506103ff6107eb366004612f2a565b611648565b3480156107fc57600080fd5b5061038561169e565b6103ff610813366004612f2a565b6116ad565b34801561082457600080fd5b506103ff610833366004612d03565b61188e565b34801561084457600080fd5b50610858610853366004612d9e565b61195c565b60405161036791906130c1565b34801561087157600080fd5b506103ff610880366004612e5f565b611a61565b34801561089157600080fd5b506103ff6108a0366004612d9e565b611b59565b3480156108b157600080fd5b506103ff6108c0366004612b20565b611c2b565b3480156108d157600080fd5b506103ff6108e0366004612be8565b611cae565b3480156108f157600080fd5b506103ff610900366004612e45565b611ce7565b34801561091157600080fd5b50610385610920366004612f2a565b611d52565b34801561093157600080fd5b506103ff610940366004612d55565b611dae565b34801561095157600080fd5b506103ff610960366004612e45565b611e4c565b34801561097157600080fd5b5061035a610980366004612aee565b611ec4565b34801561099157600080fd5b506103ff6109a0366004612ad4565b611ef2565b3480156109b157600080fd5b506104566109c0366004612ad4565b611f60565b60006001600160e01b0319821663780e9d6360e01b14806109ea57506109ea82611f72565b90505b919050565b606060008054610a0190613a2d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2d90613a2d565b8015610a7a5780601f10610a4f57610100808354040283529160200191610a7a565b820191906000526020600020905b815481529060010190602001808311610a5d57829003601f168201915b5050505050905090565b6000610a8e611fb2565b6001600160a01b0316610a9f611624565b6001600160a01b031614610ace5760405162461bcd60e51b8152600401610ac59061364c565b60405180910390fd5b506001600160a01b031660009081526005602052604090205460ff1690565b6000610af882611fb6565b610b145760405162461bcd60e51b8152600401610ac590613600565b506000908152600260205260409020546001600160a01b031690565b6000610b3b82611210565b9050806001600160a01b0316836001600160a01b03161415610b6f5760405162461bcd60e51b8152600401610ac590613720565b806001600160a01b0316610b81611fb2565b6001600160a01b03161480610b9d5750610b9d81610980611fb2565b610bb95760405162461bcd60e51b8152600401610ac59061356e565b610bc3838361201a565b505050565b6008602052600090815260409020546001600160a01b031681565b60115460ff16610c055760405162461bcd60e51b8152600401610ac5906134a4565b6000805b82811015610d1a57610c40848483818110610c3457634e487b7160e01b600052603260045260246000fd5b90506020020135611fb6565b610c5c5760405162461bcd60e51b8152600401610ac5906132d8565b600d848483818110610c7e57634e487b7160e01b600052603260045260246000fd5b9050602002013581548110610ca357634e487b7160e01b600052603260045260246000fd5b600091825260209091200180549092506001600160a01b03163314610cda5760405162461bcd60e51b8152600401610ac5906137d9565b610d0a33858584818110610cfe57634e487b7160e01b600052603260045260246000fd5b90506020020135612088565b610d1381613a68565b9050610c09565b50505050565b600d5490565b600c5481565b610d3d610d37611fb2565b82612156565b610d595760405162461bcd60e51b8152600401610ac590613868565b610bc38383836121db565b3360009081526005602052604090205460ff16610d935760405162461bcd60e51b8152600401610ac59061315d565b80600c541415610db55760405162461bcd60e51b8152600401610ac590613187565b600c55565b610dc2611fb2565b6001600160a01b0316610dd3611624565b6001600160a01b031614610df95760405162461bcd60e51b8152600401610ac59061364c565b80471015610e195760405162461bcd60e51b8152600401610ac590613421565b6000610e23611624565b6001600160a01b031682604051610e3990613039565b60006040518083038185875af1925050503d8060008114610e76576040519150601f19603f3d011682016040523d82523d6000602084013e610e7b565b606091505b5050905080610e8957600080fd5b5050565b60008060015b600d548111610f1357600d610ea96001836139d3565b81548110610ec757634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0386811691161415610f035783821415610ef7579150610f2c9050565b610f0082613a68565b91505b610f0c81613a68565b9050610e93565b5060405162461bcd60e51b8152600401610ac5906131f5565b92915050565b600a5481565b610bc383838360405180602001604052806000815250611cae565b60606000610f60836113b1565b90506000816001600160401b03811115610f8a57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610fb3578160200160208202803683370190505b50905060005b8281101561100657610fcb8582610e8d565b828281518110610feb57634e487b7160e01b600052603260045260246000fd5b6020908102919091010152610fff81613a68565b9050610fb9565b509392505050565b60115460ff1681565b61101f611fb2565b6001600160a01b0316611030611624565b6001600160a01b0316146110565760405162461bcd60e51b8152600401610ac59061364c565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000805b8281101561111257846001600160a01b0316600d8585848181106110b957634e487b7160e01b600052603260045260246000fd5b90506020020135815481106110de57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031614611102576000915050611118565b61110b81613a68565b9050611085565b50600190505b9392505050565b600d818154811061112f57600080fd5b6000918252602090912001546001600160a01b0381169150600160a01b900460ff1682565b600061115e610d20565b82111561117d5760405162461bcd60e51b8152600401610ac590613360565b5090565b60095460ff1681565b600e5460ff1681565b600e54610100900460ff1681565b4790565b3360009081526005602052604090205460ff166111d45760405162461bcd60e51b8152600401610ac59061315d565b60115460ff16151581151514156111fd5760405162461bcd60e51b8152600401610ac590613187565b6011805460ff1916911515919091179055565b600080600d6112206001856139d3565b8154811061123e57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03169050806109ea5760405162461bcd60e51b8152600401610ac5906134db565b6001600160a01b0381166000908152600760209081526040808320808352928190208054825181850281018501909352808352606094938301828280156112d857602002820191906000526020600020905b8154815260200190600101908083116112c4575b5050505050915050919050565b3360009081526005602052604090205460ff166113145760405162461bcd60e51b8152600401610ac59061315d565b61132060138585612996565b5061132d60148383612996565b5050505050565b3360009081526005602052604090205460ff166113635760405162461bcd60e51b8152600401610ac59061315d565b80600a5414156113855760405162461bcd60e51b8152600401610ac590613187565b61138d610d20565b8110156113ac5760405162461bcd60e51b8152600401610ac590613681565b600a55565b60006001600160a01b0382166113d95760405162461bcd60e51b8152600401610ac59061381f565b506001600160a01b031660009081526012602052604090205490565b6113fd611fb2565b6001600160a01b031661140e611624565b6001600160a01b0316146114345760405162461bcd60e51b8152600401610ac59061364c565b61143e60006122c9565b565b3360009081526005602052604090205460ff1661146f5760405162461bcd60e51b8152600401610ac59061315d565b82811461148e5760405162461bcd60e51b8152600401610ac5906138f0565b600080611499610d20565b905060005b858110156114ea578686828181106114c657634e487b7160e01b600052603260045260246000fd5b90506020020135836114d891906139a7565b92506114e381613a68565b905061149e565b50600a546114f883836139a7565b106115155760405162461bcd60e51b8152600401610ac5906137a4565b60005b838110156115c15760005b87878381811061154357634e487b7160e01b600052603260045260246000fd5b905060200201358110156115b057600061155c84613a68565b935083905061159f87878581811061158457634e487b7160e01b600052603260045260246000fd5b90506020020160208101906115999190612ad4565b8261231b565b506115a981613a68565b9050611523565b506115ba81613a68565b9050611518565b50505050505050565b60106020526000908152604090205481565b3360009081526005602052604090205460ff1661160b5760405162461bcd60e51b8152600401610ac59061315d565b6009805460ff1916911515919091179055565b600b5481565b6004546001600160a01b031690565b60076020526000908152604090206002015481565b3360009081526005602052604090205460ff166116775760405162461bcd60e51b8152600401610ac59061315d565b80600b5414156116995760405162461bcd60e51b8152600401610ac590613187565b600b55565b606060018054610a0190613a2d565b600260065414156116d05760405162461bcd60e51b8152600401610ac5906138b9565b6002600655600e5460ff6101009091041615156001146117025760405162461bcd60e51b8152600401610ac590613761565b600e5460ff1615611766573360009081526010602052604090205481111561173c5760405162461bcd60e51b8152600401610ac5906133a1565b336000908152601060205260408120805483929061175b9084906139d3565b909155506117e89050565b600c54336000908152600f60205260409020546117849083906139a7565b11156117a25760405162461bcd60e51b8152600401610ac59061351d565b336000908152600f60205260409020546001906117c09083906139a7565b11156117e857600b543410156117e85760405162461bcd60e51b8152600401610ac5906135cb565b60006117f2610d20565b600a5490915061180283836139a7565b11156118205760405162461bcd60e51b8152600401610ac5906137a4565b336000908152600f602052604090205461183b9083906139a7565b336000908152600f60205260408120919091555b8281101561188457600061186283613a68565b9250829050611871338261231b565b508061187c81613a68565b91505061184f565b5050600160065550565b611896611fb2565b6001600160a01b0316826001600160a01b031614156118c75760405162461bcd60e51b8152600401610ac5906133ea565b80600360006118d4611fb2565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155611918611fb2565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611950919061313f565b60405180910390a35050565b60606000826001600160401b0381111561198657634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156119af578160200160208202803683370190505b50905060005b8381101561100657600d8585838181106119df57634e487b7160e01b600052603260045260246000fd5b9050602002013581548110611a0457634e487b7160e01b600052603260045260246000fd5b9060005260206000200160000160149054906101000a900460ff16828281518110611a3f57634e487b7160e01b600052603260045260246000fd5b9115156020928302919091019091015280611a5981613a68565b9150506119b5565b3360009081526005602052604090205460ff16611a905760405162461bcd60e51b8152600401610ac59061315d565b60005b81811015610d1a57611abe838383818110610c3457634e487b7160e01b600052603260045260246000fd5b611ada5760405162461bcd60e51b8152600401610ac5906131be565b83600d848484818110611afd57634e487b7160e01b600052603260045260246000fd5b9050602002013581548110611b2257634e487b7160e01b600052603260045260246000fd5b60009182526020909120018054911515600160a01b0260ff60a01b1990921691909117905580611b5181613a68565b915050611a93565b60115460ff16611b7b5760405162461bcd60e51b8152600401610ac5906134a4565b60005b81811015610bc3573360086000858585818110611bab57634e487b7160e01b600052603260045260246000fd5b60209081029290920135835250810191909152604001600020546001600160a01b031614611beb5760405162461bcd60e51b8152600401610ac590613943565b611c1b33848484818110611c0f57634e487b7160e01b600052603260045260246000fd5b905060200201356123d8565b611c2481613a68565b9050611b7e565b60005b838110156115c157611c9e8787878785818110611c5b57634e487b7160e01b600052603260045260246000fd5b9050602002013586868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611cae92505050565b611ca781613a68565b9050611c2e565b611cbf611cb9611fb2565b83612156565b611cdb5760405162461bcd60e51b8152600401610ac590613868565b610d1a848484846124ae565b3360009081526005602052604090205460ff16611d165760405162461bcd60e51b8152600401610ac59061315d565b600e5460ff1615158115151415611d3f5760405162461bcd60e51b8152600401610ac590613187565b600e805460ff1916911515919091179055565b6060611d5d82611fb6565b611d795760405162461bcd60e51b8152600401610ac590613240565b6013611d84836124e1565b6014604051602001611d9893929190613006565b6040516020818303038152906040529050919050565b3360009081526005602052604090205460ff16611ddd5760405162461bcd60e51b8152600401610ac59061315d565b60005b82811015610d1a578160106000868685818110611e0d57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611e229190612ad4565b6001600160a01b03168152602081019190915260400160002055611e4581613a68565b9050611de0565b3360009081526005602052604090205460ff16611e7b5760405162461bcd60e51b8152600401610ac59061315d565b600e5460ff6101009091041615158115151415611eaa5760405162461bcd60e51b8152600401610ac590613187565b600e80549115156101000261ff0019909216919091179055565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205460ff1690565b611efa611fb2565b6001600160a01b0316611f0b611624565b6001600160a01b031614611f315760405162461bcd60e51b8152600401610ac59061364c565b6001600160a01b0381166000908152600560205260409020805460ff19166001179055611f5d816125fb565b50565b600f6020526000908152604090205481565b60006001600160e01b031982166380ac58cd60e01b1480611fa357506001600160e01b03198216635b5e139f60e01b145b806109ea57506109ea82612669565b3390565b60008082118015611fc95750600d548211155b80156109ea57506000600d611fdf6001856139d3565b81548110611ffd57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316141592915050565b600081815260026020526040902080546001600160a01b0319166001600160a01b038416908117909155819061204f82611210565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6001600160a01b038216600090815260076020526040812060028101805491926001926120b69084906139a7565b90915550506001600160a01b038316600090815260018083016020908152604080842042905584825280842080549384018155845281842090920185905584835260089052902080546001600160a01b031916331790556121188330846121db565b7f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d83836040516121499291906130a8565b60405180910390a1505050565b600061216182611fb6565b61217d5760405162461bcd60e51b8152600401610ac590613458565b600061218883611210565b9050806001600160a01b0316846001600160a01b031614806121c35750836001600160a01b03166121b884610aed565b6001600160a01b0316145b806121d357506121d38185611ec4565b949350505050565b826001600160a01b0316600d828154811061220657634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316146122385760405162461bcd60e51b8152600401610ac5906136d6565b61224360008261201a565b61224d8383612682565b81600d828154811061226f57634e487b7160e01b600052603260045260246000fd5b6000918252602082200180546001600160a01b0319166001600160a01b03938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b612326600083612682565b6040805180820182526001600160a01b03808516808352600060208401818152600d805460018101825590835294517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb5909501805491511515600160a01b0260ff60a01b19969095166001600160a01b031990921691909117949094169290921790925591518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6001600160a01b03821660009081526007602052604090206123fa83836126f9565b600082815260086020908152604080832080546001600160a01b03191690556001600160a01b038616835260018481019092528220429055600283018054919290916124479084906139d3565b90915550506002810154612472576001600160a01b0383166000908152600760205260408120600201555b61247d3084846121db565b7f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f7583836040516121499291906130a8565b6124b98484846121db565b6124c584848484612875565b610d1a5760405162461bcd60e51b8152600401610ac590613286565b60608161250657506040805180820190915260018152600360fc1b60208201526109ed565b8160005b8115612530578061251a81613a68565b91506125299050600a836139bf565b915061250a565b6000816001600160401b0381111561255857634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612582576020820181803683370190505b5090505b84156121d3576125976001836139d3565b91506125a4600a86613a83565b6125af9060306139a7565b60f81b8183815181106125d257634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506125f4600a866139bf565b9450612586565b612603611fb2565b6001600160a01b0316612614611624565b6001600160a01b03161461263a5760405162461bcd60e51b8152600401610ac59061364c565b6001600160a01b0381166126605760405162461bcd60e51b8152600401610ac59061331a565b611f5d816122c9565b6001600160e01b031981166301ffc9a760e01b14919050565b6001600160a01b038216156126bc576001600160a01b038216600090815260126020526040812080549091906126b790613a16565b909155505b6001600160a01b03811615610e89576001600160a01b038116600090815260126020526040812080549091906126f190613a68565b909155505050565b6001600160a01b0382166000908152600760205260408120905b6001600160a01b038416600090815260208390526040902054811015610d1a576001600160a01b038416600090815260208390526040902080548491908390811061276e57634e487b7160e01b600052603260045260246000fd5b90600052602060002001541415612863576001600160a01b038416600090815260208390526040902080546127a5906001906139d3565b815481106127c357634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b038716835290849052604090912080548390811061280657634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101929092556001600160a01b0386168152908390526040902080548061284857634e487b7160e01b600052603160045260246000fd5b60019003818190600052602060002001600090559055610d1a565b8061286d81613a68565b915050612713565b6000612889846001600160a01b0316612990565b1561298557836001600160a01b031663150b7a026128a5611fb2565b8786866040518563ffffffff1660e01b81526004016128c79493929190613050565b602060405180830381600087803b1580156128e157600080fd5b505af1925050508015612911575060408051601f3d908101601f1916820190925261290e91810190612eb2565b60015b61296b573d80801561293f576040519150601f19603f3d011682016040523d82523d6000602084013e612944565b606091505b5080516129635760405162461bcd60e51b8152600401610ac590613286565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506121d3565b506001949350505050565b3b151590565b8280546129a290613a2d565b90600052602060002090601f0160209004810192826129c45760008555612a0a565b82601f106129dd5782800160ff19823516178555612a0a565b82800160010185558215612a0a579182015b82811115612a0a5782358255916020019190600101906129ef565b5061117d9291505b8082111561117d5760008155600101612a12565b80356001600160a01b03811681146109ed57600080fd5b60008083601f840112612a4e578081fd5b5081356001600160401b03811115612a64578182fd5b6020830191508360208083028501011115612a7e57600080fd5b9250929050565b803580151581146109ed57600080fd5b60008083601f840112612aa6578182fd5b5081356001600160401b03811115612abc578182fd5b602083019150836020828501011115612a7e57600080fd5b600060208284031215612ae5578081fd5b61111882612a26565b60008060408385031215612b00578081fd5b612b0983612a26565b9150612b1760208401612a26565b90509250929050565b60008060008060008060808789031215612b38578182fd5b612b4187612a26565b9550612b4f60208801612a26565b945060408701356001600160401b0380821115612b6a578384fd5b612b768a838b01612a3d565b90965094506060890135915080821115612b8e578384fd5b50612b9b89828a01612a95565b979a9699509497509295939492505050565b600080600060608486031215612bc1578283fd5b612bca84612a26565b9250612bd860208501612a26565b9150604084013590509250925092565b60008060008060808587031215612bfd578384fd5b612c0685612a26565b93506020612c15818701612a26565b93506040860135925060608601356001600160401b0380821115612c37578384fd5b818801915088601f830112612c4a578384fd5b813581811115612c5c57612c5c613ac3565b604051601f8201601f1916810185018381118282101715612c7f57612c7f613ac3565b60405281815283820185018b1015612c95578586fd5b81858501868301379081019093019390935250939692955090935050565b600080600060408486031215612cc7578283fd5b612cd084612a26565b925060208401356001600160401b03811115612cea578283fd5b612cf686828701612a3d565b9497909650939450505050565b60008060408385031215612d15578182fd5b612d1e83612a26565b9150612b1760208401612a85565b60008060408385031215612d3e578182fd5b612d4783612a26565b946020939093013593505050565b600080600060408486031215612d69578283fd5b83356001600160401b03811115612d7e578384fd5b612d8a86828701612a3d565b909790965060209590950135949350505050565b60008060208385031215612db0578182fd5b82356001600160401b03811115612dc5578283fd5b612dd185828601612a3d565b90969095509350505050565b60008060008060408587031215612df2578182fd5b84356001600160401b0380821115612e08578384fd5b612e1488838901612a3d565b90965094506020870135915080821115612e2c578384fd5b50612e3987828801612a3d565b95989497509550505050565b600060208284031215612e56578081fd5b61111882612a85565b600080600060408486031215612e73578081fd5b612e7c84612a85565b925060208401356001600160401b03811115612cea578182fd5b600060208284031215612ea7578081fd5b813561111881613ad9565b600060208284031215612ec3578081fd5b815161111881613ad9565b60008060008060408587031215612ee3578182fd5b84356001600160401b0380821115612ef9578384fd5b612f0588838901612a95565b90965094506020870135915080821115612f1d578384fd5b50612e3987828801612a95565b600060208284031215612f3b578081fd5b5035919050565b60008151808452612f5a8160208601602086016139ea565b601f01601f19169290920160200192915050565b805460009060028104600180831680612f8857607f831692505b6020808410821415612fa857634e487b7160e01b86526022600452602486fd5b818015612fbc5760018114612fcd57612ffa565b60ff19861689528489019650612ffa565b612fd68861399b565b60005b86811015612ff25781548b820152908501908301612fd9565b505084890196505b50505050505092915050565b60006130128286612f6e565b84516130228183602089016139ea565b61302e81830186612f6e565b979650505050505050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061308390830184612f42565b9695505050505050565b6001600160a01b039290921682521515602082015260400190565b6001600160a01b03929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b818110156130fb5783511515835292840192918401916001016130dd565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156130fb57835183529284019291840191600101613123565b901515815260200190565b6000602082526111186020830184612f42565b60208082526010908201526f496e76616c69642064656c656761746560801b604082015260600190565b6020808252601c908201527f54696765723a204e65772076616c7565206d617463686573206f6c6400000000604082015260600190565b60208082526018908201527f54696765723a20546f6b656e4964206e6f742065786973740000000000000000604082015260600190565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b60208082526026908201527f54696765723a2055524920717565727920666f72206e6f6e6578697374656e74604082015265103a37b5b2b760d11b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526022908201527f54696765723a20517565727920666f72206e6f6e6578697374656e7420746f6b60408201526132b760f11b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526021908201527f54696765723a20676c6f62616c20696e646578206f7574206f6620626f756e646040820152607360f81b606082015260800190565b60208082526029908201527f54696765723a204163636f756e74206973206c657373207468616e20746865206040820152681c5d1e481b1a5b5a5d60ba1b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b6020808252601d908201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252601c908201527f54696765723a205374616b696e67206973206e6f742061637469766500000000604082015260600190565b60208082526022908201527f54696765723a20717565727920666f72206e6f6e6578697374656e7420746f6b60408201526132b760f11b606082015260800190565b60208082526031908201527f54696765723a5175616e74697479206d757374206265206c657373207468616e604082015270206f7220657175616c204d41585f51545960781b606082015260800190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252818101527f54696765723a2045746865722073656e74206973206e6f7420636f7272656374604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526035908201527f54696765723a2053706563696669656420737570706c79206973206c6f776572604082015274207468616e2063757272656e742062616c616e636560581b606082015260800190565b6020808252602a908201527f54696765723a207472616e73666572206f6620746f6b656e2074686174206973604082015269081b9bdd081bdddb995960b21b606082015260800190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b60208082526023908201527f54696765723a204d696e74696e67206e6565647320746f20626520656e61626c60408201526232b21760e91b606082015260800190565b6020808252818101527f54696765723a204d696e742f6f72646572206578636565647320737570706c79604082015260600190565b60208082526026908201527f54696765723a205374616b696e6720746f6b656e2074686174206973206e6f74604082015265081bdddb995960d21b606082015260800190565b60208082526029908201527f54696765723a2062616c616e636520717565727920666f7220746865207a65726040820152686f206164647265737360b81b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526033908201527f54696765723a204d7573742070726f7669646520657175616c207175616e74696040820152727469657320616e6420726563697069656e747360681b606082015260800190565b6020808252602f908201527f54696765722e5f756e7374616b653a2053656e646572206d757374206861766560408201526e081cdd185ad959081d1bdad95b9251608a1b606082015260800190565b90815260200190565b60009081526020902090565b600082198211156139ba576139ba613a97565b500190565b6000826139ce576139ce613aad565b500490565b6000828210156139e5576139e5613a97565b500390565b60005b83811015613a055781810151838201526020016139ed565b83811115610d1a5750506000910152565b600081613a2557613a25613a97565b506000190190565b600281046001821680613a4157607f821691505b60208210811415613a6257634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613a7c57613a7c613a97565b5060010190565b600082613a9257613a92613aad565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114611f5d57600080fdfea2646970667358221220ba44ad10da173e35bddca1dd61fc16c1c5f99097bbcfe2dbf04fa6586cd7aa5764736f6c63430008000033

Deployed Bytecode Sourcemap

464:13876:15:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;719:223:4;;;;;;;;;;-1:-1:-1;719:223:4;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1038:100:5;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;417:110:2:-;;;;;;;;;;-1:-1:-1;417:110:2;;;;;:::i;:::-;;:::i;2182:213:5:-;;;;;;;;;;-1:-1:-1;2182:213:5;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1783:393::-;;;;;;;;;;-1:-1:-1;1783:393:5;;;;;:::i;:::-;;:::i;:::-;;1072:53:15;;;;;;;;;;-1:-1:-1;1072:53:15;;;;;:::i;:::-;;:::i;11388:551::-;;;;;;;;;;-1:-1:-1;11388:551:15;;;;;:::i;:::-;;:::i;4154:102::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;1468:23::-;;;;;;;;;;;;;:::i;2866:326:5:-;;;;;;;;;;-1:-1:-1;2866:326:5;;;;;:::i;:::-;;:::i;8815:147:15:-;;;;;;;;;;-1:-1:-1;8815:147:15;;;;;:::i;:::-;;:::i;6206:530::-;;;;;;;;;;-1:-1:-1;6206:530:15;;;;;:::i;:::-;;:::i;3375:360::-;;;;;;;;;;-1:-1:-1;3375:360:15;;;;;:::i;:::-;;:::i;1392:31::-;;;;;;;;;;;;;:::i;3198:178:5:-;;;;;;;;;;-1:-1:-1;3198:178:5;;;;;:::i;:::-;;:::i;4340:305:15:-;;;;;;;;;;-1:-1:-1;4340:305:15;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1691:35::-;;;;;;;;;;;;;:::i;531:114:2:-;;;;;;;;;;-1:-1:-1;531:114:2;;;;;:::i;:::-;;:::i;2346:247:15:-;;;;;;;;;;-1:-1:-1;2346:247:15;;;;;:::i;:::-;;:::i;1498:19::-;;;;;;;;;;-1:-1:-1;1498:19:15;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;3039:169::-;;;;;;;;;;-1:-1:-1;3039:169:15;;;;;:::i;:::-;;:::i;1357:28::-;;;;;;;;;;;;;:::i;1522:37::-;;;;;;;;;;;;;:::i;1563:32::-;;;;;;;;;;;;;:::i;6034:103::-;;;;;;;;;;;;;:::i;13557:183::-;;;;;;;;;;-1:-1:-1;13557:183:15;;;;;:::i;:::-;;:::i;2661:218::-;;;;;;;;;;-1:-1:-1;2661:218:15;;;;;:::i;:::-;;:::i;11136:187::-;;;;;;;;;;-1:-1:-1;11136:187:15;;;;;:::i;:::-;;:::i;8268:155::-;;;;;;;;;;-1:-1:-1;8268:155:15;;;;;:::i;:::-;;:::i;8494:265::-;;;;;;;;;;-1:-1:-1;8494:265:15;;;;;:::i;:::-;;:::i;2063:189::-;;;;;;;;;;-1:-1:-1;2063:189:15;;;;;:::i;:::-;;:::i;1598:92:12:-;;;;;;;;;;;;;:::i;6812:609:15:-;;;;;;;;;;-1:-1:-1;6812:609:15;;;;;:::i;:::-;;:::i;1644:42::-;;;;;;;;;;-1:-1:-1;1644:42:15;;;;;:::i;:::-;;:::i;4708:92::-;;;;;;;;;;-1:-1:-1;4708:92:15;;;;;:::i;:::-;;:::i;1427:37::-;;;;;;;;;;;;;:::i;966:85:12:-;;;;;;;;;;;;;:::i;978:41:15:-;;;;;;;;;;-1:-1:-1;978:41:15;;;;;:::i;:::-;;:::i;9023:139::-;;;;;;;;;;-1:-1:-1;9023:139:15;;;;;:::i;:::-;;:::i;1534:104:5:-;;;;;;;;;;;;;:::i;4875:1083:15:-;;;;;;:::i;:::-;;:::i;2569:291:5:-;;;;;;;;;;-1:-1:-1;2569:291:5;;;;;:::i;:::-;;:::i;10323:334:15:-;;;;;;;;;;-1:-1:-1;10323:334:15;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;9928:328::-;;;;;;;;;;-1:-1:-1;9928:328:15;;;;;:::i;:::-;;:::i;12503:407::-;;;;;;;;;;-1:-1:-1;12503:407:15;;;;;:::i;:::-;;:::i;1340:241:4:-;;;;;;;;;;-1:-1:-1;1340:241:4;;;;;:::i;:::-;;:::i;3382:317:5:-;;;;;;;;;;-1:-1:-1;3382:317:5;;;;;:::i;:::-;;:::i;7991:213:15:-;;;;;;;;;;-1:-1:-1;7991:213:15;;;;;:::i;:::-;;:::i;3825:248::-;;;;;;;;;;-1:-1:-1;3825:248:15;;;;;:::i;:::-;;:::i;7490:191::-;;;;;;;;;;-1:-1:-1;7490:191:15;;;;;:::i;:::-;;:::i;7741:181::-;;;;;;;;;;-1:-1:-1;7741:181:15;;;;;:::i;:::-;;:::i;2401:162:5:-;;;;;;;;;;-1:-1:-1;2401:162:5;;;;;:::i;:::-;;:::i;649:158:2:-;;;;;;;;;;-1:-1:-1;649:158:2;;;;;:::i;:::-;;:::i;1600:39:15:-;;;;;;;;;;-1:-1:-1;1600:39:15;;;;;:::i;:::-;;:::i;719:223:4:-;822:4;-1:-1:-1;;;;;;845:50:4;;-1:-1:-1;;;845:50:4;;:90;;;899:36;923:11;899:23;:36::i;:::-;838:97;;719:223;;;;:::o;1038:100:5:-;1094:13;1126:5;1119:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1038:100;:::o;417:110:2:-;487:4;1189:12:12;:10;:12::i;:::-;-1:-1:-1;;;;;1178:23:12;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1178:23:12;;1170:68;;;;-1:-1:-1;;;1170:68:12;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;;506:16:2::1;;::::0;;;:10:::1;:16;::::0;;;;;::::1;;::::0;417:110::o;2182:213:5:-;2255:7;2282:16;2290:7;2282;:16::i;:::-;2274:73;;;;-1:-1:-1;;;2274:73:5;;;;;;;:::i;:::-;-1:-1:-1;2364:24:5;;;;:15;:24;;;;;;-1:-1:-1;;;;;2364:24:5;;2182:213::o;1783:393::-;1862:13;1878:16;1886:7;1878;:16::i;:::-;1862:32;;1918:5;-1:-1:-1;;;;;1912:11:5;:2;-1:-1:-1;;;;;1912:11:5;;;1904:57;;;;-1:-1:-1;;;1904:57:5;;;;;;;:::i;:::-;2009:5;-1:-1:-1;;;;;1993:21:5;:12;:10;:12::i;:::-;-1:-1:-1;;;;;1993:21:5;;:62;;;;2018:37;2035:5;2042:12;:10;:12::i;2018:37::-;1972:165;;;;-1:-1:-1;;;1972:165:5;;;;;;;:::i;:::-;2148:21;2157:2;2161:7;2148:8;:21::i;:::-;1783:393;;;:::o;1072:53:15:-;;;;;;;;;;;;-1:-1:-1;;;;;1072:53:15;;:::o;11388:551::-;11459:13;;;;11450:56;;;;-1:-1:-1;;;11450:56:15;;;;;;;:::i;:::-;11525:17;11629:6;11624:309;11637:19;;;11624:309;;;11686:20;11694:8;;11703:1;11694:11;;;;;-1:-1:-1;;;11694:11:15;;;;;;;;;;;;;;;11686:7;:20::i;:::-;11677:69;;;;-1:-1:-1;;;11677:69:15;;;;;;;:::i;:::-;11767:5;11774:8;;11783:1;11774:11;;;;;-1:-1:-1;;;11774:11:15;;;;;;;;;;;;;;;11767:20;;;;;;-1:-1:-1;;;11767:20:15;;;;;;;;;;;;;;;;;;11809:10;;11767:20;;-1:-1:-1;;;;;;11809:10:15;11823;11809:24;11801:75;;;;-1:-1:-1;;;11801:75:15;;;;;;;:::i;:::-;11891:31;11898:10;11910:8;;11919:1;11910:11;;;;;-1:-1:-1;;;11910:11:15;;;;;;;;;;;;;;;11891:6;:31::i;:::-;11658:3;;;:::i;:::-;;;11624:309;;;;11388:551;;;:::o;4154:102::-;4239:5;:12;4154:102;:::o;1468:23::-;;;;:::o;2866:326:5:-;3052:41;3071:12;:10;:12::i;:::-;3085:7;3052:18;:41::i;:::-;3044:103;;;;-1:-1:-1;;;3044:103:5;;;;;;;:::i;:::-;3157:28;3167:4;3173:2;3177:7;3157:9;:28::i;8815:147:15:-;354:10:2;343:22;;;;:10;:22;;;;;;;;335:52;;;;-1:-1:-1;;;335:52:2;;;;;;;:::i;:::-;8895:6:15::1;8884:7;;:17;;8875:60;;;;-1:-1:-1::0;;;8875:60:15::1;;;;;;;:::i;:::-;8941:7;:16:::0;8815:147::o;6206:530::-;1189:12:12;:10;:12::i;:::-;-1:-1:-1;;;;;1178:23:12;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1178:23:12;;1170:68;;;;-1:-1:-1;;;1170:68:12;;;;;;;:::i;:::-;6297:7:15::1;6272:21;:32;;6264:74;;;;-1:-1:-1::0;;;6264:74:15::1;;;;;;;:::i;:::-;6575:7;6596;:5;:7::i;:::-;-1:-1:-1::0;;;;;6588:21:15::1;6617:7;6588:41;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6574:55;;;6643:2;6635:11;;;::::0;::::1;;1248:1:12;6206:530:15::0;:::o;3375:360::-;3461:12;;3509:1;3497:174;3517:5;:12;3512:17;;3497:174;;3557:5;3563:3;3565:1;3563;:3;:::i;:::-;3557:10;;;;;;-1:-1:-1;;;3557:10:15;;;;;;;;;;;;;;;;;;:16;-1:-1:-1;;;;;3548:25:15;;;3557:16;;3548:25;3544:121;;;3598:5;3589;:14;3585:71;;;3623:1;-1:-1:-1;3616:8:15;;-1:-1:-1;3616:8:15;3585:71;3649:7;;;:::i;:::-;;;3585:71;3531:3;;;:::i;:::-;;;3497:174;;;;3677:53;;-1:-1:-1;;;3677:53:15;;;;;;;:::i;3375:360::-;;;;;:::o;1392:31::-;;;;:::o;3198:178:5:-;3330:39;3347:4;3353:2;3357:7;3330:39;;;;;;;;;;;;:16;:39::i;4340:305:15:-;4414:13;4435;4451:20;4462:7;4451:9;:20::i;:::-;4435:36;;4477:20;4512:8;-1:-1:-1;;;;;4500:22:15;;;;;-1:-1:-1;;;4500:22:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4500:22:15;;4477:45;;4533:6;4528:94;4545:8;4541:1;:12;4528:94;;;4582:33;4603:7;4612:1;4582:19;:33::i;:::-;4570:6;4577:1;4570:9;;;;;;-1:-1:-1;;;4570:9:15;;;;;;;;;;;;;;;;;;:45;4555:3;;;:::i;:::-;;;4528:94;;;-1:-1:-1;4634:6:15;4340:305;-1:-1:-1;;;4340:305:15:o;1691:35::-;;;;;;:::o;531:114:2:-;1189:12:12;:10;:12::i;:::-;-1:-1:-1;;;;;1178:23:12;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1178:23:12;;1170:68;;;;-1:-1:-1;;;1170:68:12;;;;;;;:::i;:::-;-1:-1:-1;;;;;610:16:2;;;::::1;;::::0;;;:10:::1;:16;::::0;;;;:30;;-1:-1:-1;;610:30:2::1;::::0;::::1;;::::0;;;::::1;::::0;;531:114::o;2346:247:15:-;2442:4;2458:6;2454:117;2466:19;;;2454:117;;;2534:7;-1:-1:-1;;;;;2504:37:15;:5;2511:8;;2520:1;2511:11;;;;;-1:-1:-1;;;2511:11:15;;;;;;;;;;;;;;;2504:20;;;;;;-1:-1:-1;;;2504:20:15;;;;;;;;;;;;;;;;;;:26;-1:-1:-1;;;;;2504:26:15;:37;2500:64;;2559:5;2552:12;;;;;2500:64;2487:3;;;:::i;:::-;;;2454:117;;;;2584:4;2577:11;;2346:247;;;;;;:::o;1498:19::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1498:19:15;;;-1:-1:-1;;;;1498:19:15;;;;;:::o;3039:169::-;3105:4;3134:13;:11;:13::i;:::-;3125:5;:22;;3117:68;;;;-1:-1:-1;;;3117:68:15;;;;;;;:::i;:::-;-1:-1:-1;3198:5:15;3039:169::o;1357:28::-;;;;;;:::o;1522:37::-;;;;;;:::o;1563:32::-;;;;;;;;;:::o;6034:103::-;6111:21;6034:103;:::o;13557:183::-;354:10:2;343:22;;;;:10;:22;;;;;;;;335:52;;;;-1:-1:-1;;;335:52:2;;;;;;;:::i;:::-;13639:13:15::1;::::0;::::1;;:26;;::::0;::::1;;;;13630:70;;;;-1:-1:-1::0;;;13630:70:15::1;;;;;;;:::i;:::-;13708:13;:25:::0;;-1:-1:-1;;13708:25:15::1;::::0;::::1;;::::0;;;::::1;::::0;;13557:183::o;2661:218::-;2724:14;;2762:5;2768:9;2776:1;2768:7;:9;:::i;:::-;2762:16;;;;;;-1:-1:-1;;;2762:16:15;;;;;;;;;;;;;;;;;;:22;-1:-1:-1;;;;;2762:22:15;;-1:-1:-1;2798:19:15;2790:66;;;;-1:-1:-1;;;2790:66:15;;;;;;;:::i;11136:187::-;-1:-1:-1;;;;;11258:14:15;;11234:21;11258:14;;;:7;:14;;;;;;;;11289:26;;;;;;;11282:33;;;;;;;;;;;;;;;;;11197:25;;11258:14;11282:33;;11289:26;11282:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11136:187;;;:::o;8268:155::-;354:10:2;343:22;;;;:10;:22;;;;;;;;335:52;;;;-1:-1:-1;;;335:52:2;;;;;;;:::i;:::-;8364:24:15::1;:15;8382:6:::0;;8364:24:::1;:::i;:::-;-1:-1:-1::0;8394:24:15::1;:15;8412:6:::0;;8394:24:::1;:::i;:::-;;8268:155:::0;;;;:::o;8494:265::-;354:10:2;343:22;;;;:10;:22;;;;;;;;335:52;;;;-1:-1:-1;;;335:52:2;;;;;;;:::i;:::-;8583:9:15::1;8569:10;;:23;;8560:66;;;;-1:-1:-1::0;;;8560:66:15::1;;;;;;;:::i;:::-;8654:13;:11;:13::i;:::-;8641:9;:26;;8632:94;;;;-1:-1:-1::0;;;8632:94:15::1;;;;;;;:::i;:::-;8732:10;:22:::0;8494:265::o;2063:189::-;2129:4;-1:-1:-1;;;;;2149:21:15;;2141:75;;;;-1:-1:-1;;;2141:75:15;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2229:18:15;;;;;:9;:18;;;;;;;2063:189::o;1598:92:12:-;1189:12;:10;:12::i;:::-;-1:-1:-1;;;;;1178:23:12;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1178:23:12;;1170:68;;;;-1:-1:-1;;;1170:68:12;;;;;;;:::i;:::-;1662:21:::1;1680:1;1662:9;:21::i;:::-;1598:92::o:0;6812:609:15:-;354:10:2;343:22;;;;:10;:22;;;;;;;;335:52;;;;-1:-1:-1;;;335:52:2;;;;;;;:::i;:::-;6921:35:15;;::::1;6913:100;;;;-1:-1:-1::0;;;6913:100:15::1;;;;;;;:::i;:::-;7020:18;7044:11:::0;7058:13:::1;:11;:13::i;:::-;7044:27;;7081:6;7077:80;7089:19:::0;;::::1;7077:80;;;7139:8;;7148:1;7139:11;;;;;-1:-1:-1::0;;;7139:11:15::1;;;;;;;;;;;;;;;7122:28;;;;;:::i;:::-;::::0;-1:-1:-1;7110:3:15::1;::::0;::::1;:::i;:::-;;;7077:80;;;-1:-1:-1::0;7196:10:15::1;::::0;7171:22:::1;7180:13:::0;7171:6;:22:::1;:::i;:::-;:35;7162:82;;;;-1:-1:-1::0;;;7162:82:15::1;;;;;;;:::i;:::-;7255:6;7251:166;7263:20:::0;;::::1;7251:166;;;7301:6;7297:114;7313:8;;7322:1;7313:11;;;;;-1:-1:-1::0;;;7313:11:15::1;;;;;;;;;;;;;;;7309:1;:15;7297:114;;;7340:12;7355:8;::::0;::::1;:::i;:::-;;;;7340:23;;7373:29;7380:9;;7390:1;7380:12;;;;;-1:-1:-1::0;;;7380:12:15::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7394:7;7373:5;:29::i;:::-;-1:-1:-1::0;7326:3:15::1;::::0;::::1;:::i;:::-;;;7297:114;;;-1:-1:-1::0;7285:3:15::1;::::0;::::1;:::i;:::-;;;7251:166;;;;393:1:2;;6812:609:15::0;;;;:::o;1644:42::-;;;;;;;;;;;;;:::o;4708:92::-;354:10:2;343:22;;;;:10;:22;;;;;;;;335:52;;;;-1:-1:-1;;;335:52:2;;;;;;;:::i;:::-;4777:8:15::1;:18:::0;;-1:-1:-1;;4777:18:15::1;::::0;::::1;;::::0;;;::::1;::::0;;4708:92::o;1427:37::-;;;;:::o;966:85:12:-;1038:6;;-1:-1:-1;;;;;1038:6:12;966:85;:::o;978:41:15:-;;;;;;;;;;;;;;;:::o;9023:139::-;354:10:2;343:22;;;;:10;:22;;;;;;;;335:52;;;;-1:-1:-1;;;335:52:2;;;;;;;:::i;:::-;9099:5:15::1;9090;;:14;;9081:57;;;;-1:-1:-1::0;;;9081:57:15::1;;;;;;;:::i;:::-;9144:5;:13:::0;9023:139::o;1534:104:5:-;1592:13;1624:7;1617:14;;;;;:::i;4875:1083:15:-;1744:1:13;2325:7;;:19;;2317:63;;;;-1:-1:-1;;;2317:63:13;;;;;;;:::i;:::-;1744:1;2455:7;:18;4950:12:15::1;::::0;::::1;;::::0;;::::1;;:20;;:12;:20;4942:67;;;;-1:-1:-1::0;;;4942:67:15::1;;;;;;;:::i;:::-;5135:17;::::0;::::1;;5131:527;;;5183:10;5171:24;::::0;;;:10:::1;:24;::::0;;;;;:36;-1:-1:-1;5171:36:15::1;5162:91;;;;-1:-1:-1::0;;;5162:91:15::1;;;;;;;:::i;:::-;5273:10;5261:24;::::0;;;:10:::1;:24;::::0;;;;:36;;5289:8;;5261:24;:36:::1;::::0;5289:8;;5261:36:::1;:::i;:::-;::::0;;;-1:-1:-1;5131:527:15::1;::::0;-1:-1:-1;5131:527:15::1;;5464:7;::::0;5440:10:::1;5432:19;::::0;;;:7:::1;:19;::::0;;;;;:28:::1;::::0;5452:8;;5432:28:::1;:::i;:::-;:39;;5424:100;;;;-1:-1:-1::0;;;5424:100:15::1;;;;;;;:::i;:::-;5543:10;5535:19;::::0;;;:7:::1;:19;::::0;;;;;5564:1:::1;::::0;5535:28:::1;::::0;5555:8;;5535:28:::1;:::i;:::-;:30;5532:120;;;5599:5;;5586:9;:18;;5577:66;;;;-1:-1:-1::0;;;5577:66:15::1;;;;;;;:::i;:::-;5664:11;5678:13;:11;:13::i;:::-;5727:10;::::0;5664:27;;-1:-1:-1;5706:17:15::1;5715:8:::0;5664:27;5706:17:::1;:::i;:::-;:31;;5697:78;;;;-1:-1:-1::0;;;5697:78:15::1;;;;;;;:::i;:::-;5811:10;5803:19;::::0;;;:7:::1;:19;::::0;;;;;:30:::1;::::0;5825:8;;5803:30:::1;:::i;:::-;5789:10;5781:19;::::0;;;:7:::1;:19;::::0;;;;:52;;;;5839:107:::1;5855:8;5851:1;:12;5839:107;;;5878:12;5894:8;::::0;::::1;:::i;:::-;;;;5878:24;;5911:28;5918:10;5930:7;5911:5;:28::i;:::-;-1:-1:-1::0;5865:3:15;::::1;::::0;::::1;:::i;:::-;;;;5839:107;;;-1:-1:-1::0;;1701:1:13;2628:7;:22;-1:-1:-1;4875:1083:15:o;2569:291:5:-;2685:12;:10;:12::i;:::-;-1:-1:-1;;;;;2673:24:5;:8;-1:-1:-1;;;;;2673:24:5;;;2665:62;;;;-1:-1:-1;;;2665:62:5;;;;;;;:::i;:::-;2782:8;2737:18;:32;2756:12;:10;:12::i;:::-;-1:-1:-1;;;;;2737:32:5;;;;;;;;;;;;;;;;;-1:-1:-1;2737:32:5;;;:42;;;;;;;;;;;;:53;;-1:-1:-1;;2737:53:5;;;;;;;;;;;2820:12;:10;:12::i;:::-;-1:-1:-1;;;;;2805:48:5;;2844:8;2805:48;;;;;;:::i;:::-;;;;;;;;2569:291;;:::o;10323:334:15:-;10392:23;10461:24;10499:8;-1:-1:-1;;;;;10488:27:15;;;;;-1:-1:-1;;;10488:27:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10488:27:15;;10461:54;;10527:6;10523:105;10535:19;;;10523:105;;;10587:5;10593:8;;10602:1;10593:11;;;;;-1:-1:-1;;;10593:11:15;;;;;;;;;;;;;;;10587:18;;;;;;-1:-1:-1;;;10587:18:15;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;10571:10;10582:1;10571:13;;;;;;-1:-1:-1;;;10571:13:15;;;;;;;;;:48;;;:13;;;;;;;;;;;:48;10556:3;;;;:::i;:::-;;;;10523:105;;9928:328;354:10:2;343:22;;;;:10;:22;;;;;;;;335:52;;;;-1:-1:-1;;;335:52:2;;;;;;;:::i;:::-;10077:6:15::1;10073:179;10087:19:::0;;::::1;10073:179;;;10135:20;10143:8;;10152:1;10143:11;;;;;-1:-1:-1::0;;;10143:11:15::1;;;;;;;;10135:20;10127:57;;;;-1:-1:-1::0;;;10127:57:15::1;;;;;;;:::i;:::-;10233:8;10198:5;10204:8;;10213:1;10204:11;;;;;-1:-1:-1::0;;;10204:11:15::1;;;;;;;;;;;;;;;10198:18;;;;;;-1:-1:-1::0;;;10198:18:15::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;:43:::0;;;::::1;;-1:-1:-1::0;;;10198:43:15::1;-1:-1:-1::0;;;;10198:43:15;;::::1;::::0;;;::::1;::::0;;10108:3;::::1;::::0;::::1;:::i;:::-;;;;10073:179;;12503:407:::0;12576:13;;;;12567:56;;;;-1:-1:-1;;;12567:56:15;;;;;;;:::i;:::-;12672:6;12667:237;12680:19;;;12667:237;;;12764:10;12729:18;:31;12748:8;;12757:1;12748:11;;;;;-1:-1:-1;;;12748:11:15;;;;;;;;;;;;;;;;;;12729:31;;-1:-1:-1;12729:31:15;;;;;;;;-1:-1:-1;12729:31:15;;-1:-1:-1;;;;;12729:31:15;:45;12720:119;;;;-1:-1:-1;;;12720:119:15;;;;;;;:::i;:::-;12853:32;12862:10;12873:8;;12882:1;12873:11;;;;;-1:-1:-1;;;12873:11:15;;;;;;;;;;;;;;;12853:8;:32::i;:::-;12701:3;;;:::i;:::-;;;12667:237;;1340:241:4;1469:6;1465:110;1477:19;;;1465:110;;;1517:47;1535:4;1541:2;1545:8;;1554:1;1545:11;;;;;-1:-1:-1;;;1545:11:4;;;;;;;;;;;;;;;1558:4;;1517:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1517:16:4;;-1:-1:-1;;;1517:47:4:i;:::-;1498:3;;;:::i;:::-;;;1465:110;;3382:317:5;3548:41;3567:12;:10;:12::i;:::-;3581:7;3548:18;:41::i;:::-;3540:103;;;;-1:-1:-1;;;3540:103:5;;;;;;;:::i;:::-;3653:39;3667:4;3673:2;3677:7;3686:5;3653:13;:39::i;7991:213:15:-;354:10:2;343:22;;;;:10;:22;;;;;;;;335:52;;;;-1:-1:-1;;;335:52:2;;;;;;;:::i;:::-;8081:17:15::1;::::0;::::1;;:39;;::::0;::::1;;;;8072:83;;;;-1:-1:-1::0;;;8072:83:15::1;;;;;;;:::i;:::-;8161:17;:38:::0;;-1:-1:-1;;8161:38:15::1;::::0;::::1;;::::0;;;::::1;::::0;;7991:213::o;3825:248::-;3889:13;3918:16;3926:7;3918;:16::i;:::-;3910:67;;;;-1:-1:-1;;;3910:67:15;;;;;;;:::i;:::-;4014:15;4031:18;:7;:16;:18::i;:::-;4051:15;3997:70;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3983:85;;3825:248;;;:::o;7490:191::-;354:10:2;343:22;;;;:10;:22;;;;;;;;335:52;;;;-1:-1:-1;;;335:52:2;;;;;;;:::i;:::-;7594:6:15::1;7590:87;7602:19:::0;;::::1;7590:87;;;7663:7;7635:10;:25;7647:8;;7656:1;7647:11;;;;;-1:-1:-1::0;;;7647:11:15::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;7635:25:15::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;7635:25:15;:35;7623:3:::1;::::0;::::1;:::i;:::-;;;7590:87;;7741:181:::0;354:10:2;343:22;;;;:10;:22;;;;;;;;335:52;;;;-1:-1:-1;;;335:52:2;;;;;;;:::i;:::-;7823:12:15::1;::::0;::::1;;::::0;;::::1;;:27;;::::0;::::1;;;;7814:71;;;;-1:-1:-1::0;;;7814:71:15::1;;;;;;;:::i;:::-;7891:12;:26:::0;;;::::1;;;;-1:-1:-1::0;;7891:26:15;;::::1;::::0;;;::::1;::::0;;7741:181::o;2401:162:5:-;-1:-1:-1;;;;;2521:25:5;;;2498:4;2521:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;2401:162::o;649:158:2:-;1189:12:12;:10;:12::i;:::-;-1:-1:-1;;;;;1178:23:12;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1178:23:12;;1170:68;;;;-1:-1:-1;;;1170:68:12;;;;;;;:::i;:::-;-1:-1:-1;;;;;734:20:2;::::1;;::::0;;;:10:::1;:20;::::0;;;;:27;;-1:-1:-1;;734:27:2::1;757:4;734:27;::::0;;767:35:::1;745:8:::0;767:23:::1;:35::i;:::-;649:158:::0;:::o;1600:39:15:-;;;;;;;;;;;;;:::o;1228:300:5:-;1330:4;-1:-1:-1;;;;;;1365:40:5;;-1:-1:-1;;;1365:40:5;;:104;;-1:-1:-1;;;;;;;1421:48:5;;-1:-1:-1;;;1421:48:5;1365:104;:156;;;;1485:36;1509:11;1485:23;:36::i;587:96:1:-;666:10;587:96;:::o;9484:163:15:-;9547:4;9574:1;9566:7;:9;:36;;;;-1:-1:-1;9590:5:15;:12;9579:23;;;9566:36;:76;;;;-1:-1:-1;9640:1:15;9606:5;9612:9;9620:1;9612:7;:9;:::i;:::-;9606:16;;;;;;-1:-1:-1;;;9606:16:15;;;;;;;;;;;;;;;;;;:22;-1:-1:-1;;;;;9606:22:15;:36;;;9484:163;-1:-1:-1;;9484:163:15:o;3721:161:5:-;3792:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;3792:29:5;-1:-1:-1;;;;;3792:29:5;;;;;;;;:24;;3845:16;3792:24;3845:7;:16::i;:::-;-1:-1:-1;;;;;3836:39:5;;;;;;;;;;;3721:161;;:::o;12022:412:15:-;-1:-1:-1;;;;;12117:14:15;;12093:21;12117:14;;;:7;:14;;;;;12142:19;;;:24;;12117:14;;12165:1;;12142:24;;12165:1;;12142:24;:::i;:::-;;;;-1:-1:-1;;;;;;;12176:24:15;;;;;;:17;;;;:24;;;;;;;;12203:15;12176:42;;12228:26;;;;;;:41;;;;;;;;;;;;;;;;;;12280:28;;;:18;:28;;;;:41;;-1:-1:-1;;;;;;12280:41:15;12311:10;12280:41;;;12332:40;12194:5;12356:4;12260:8;12332:9;:40::i;:::-;12394:23;12401:5;12408:8;12394:23;;;;;;;:::i;:::-;;;;;;;;12022:412;;;:::o;4743:334:5:-;4833:4;4857:16;4865:7;4857;:16::i;:::-;4849:73;;;;-1:-1:-1;;;4849:73:5;;;;;;;:::i;:::-;4932:13;4948:16;4956:7;4948;:16::i;:::-;4932:32;;4993:5;-1:-1:-1;;;;;4982:16:5;:7;-1:-1:-1;;;;;4982:16:5;;:51;;;;5026:7;-1:-1:-1;;;;;5002:31:5;:20;5014:7;5002:11;:20::i;:::-;-1:-1:-1;;;;;5002:31:5;;4982:51;:87;;;;5037:32;5054:5;5061:7;5037:16;:32::i;:::-;4974:96;4743:334;-1:-1:-1;;;;4743:334:5:o;10714:360:15:-;10829:4;-1:-1:-1;;;;;10805:28:15;:5;10811:7;10805:14;;;;;;-1:-1:-1;;;10805:14:15;;;;;;;;;;;;;;;;;;:20;-1:-1:-1;;;;;10805:20:15;:28;10797:83;;;;-1:-1:-1;;;10797:83:15;;;;;;;:::i;:::-;10934:29;10951:1;10955:7;10934:8;:29::i;:::-;10969:30;10990:4;10996:2;10969:20;:30::i;:::-;11029:2;11006:5;11012:7;11006:14;;;;;;-1:-1:-1;;;11006:14:15;;;;;;;;;;;;;;;;;:25;;-1:-1:-1;;;;;;11006:25:15;-1:-1:-1;;;;;11006:25:15;;;;;;11042:27;;11061:7;;11042:27;;;;;;;;;;11006:14;11042:27;10714:360;;;:::o;2034:169:12:-;2108:6;;;-1:-1:-1;;;;;2124:17:12;;;-1:-1:-1;;;;;;2124:17:12;;;;;;;2156:40;;2108:6;;;2124:17;2108:6;;2156:40;;2089:16;;2156:40;2034:169;;:::o;9707:173:15:-;9763:36;9792:1;9796:2;9763:20;:36::i;:::-;9816:14;;;;;;;;-1:-1:-1;;;;;9816:14:15;;;;;;-1:-1:-1;9816:14:15;;;;;;9805:5;:26;;9816:14;9805:26;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;9805:26:15;-1:-1:-1;;;;9805:26:15;;;;-1:-1:-1;;;;;;9805:26:15;;;;;;;;;;;;;;;;;;9842:33;;9867:7;;-1:-1:-1;9842:33:15;;-1:-1:-1;;9842:33:15;9707:173;;:::o;12995:485::-;-1:-1:-1;;;;;13091:14:15;;13067:21;13091:14;;;:7;:14;;;;;13116:31;13099:5;13138:8;13116:14;:31::i;:::-;13165:28;;;;:18;:28;;;;;;;;13158:35;;-1:-1:-1;;;;;;13158:35:15;;;-1:-1:-1;;;;;13203:24:15;;;;13158:35;13203:17;;;:24;;;;;13230:15;13203:42;;13255:19;;;:24;;13158:35;;13255:19;;:24;;13158:35;;13255:24;:::i;:::-;;;;-1:-1:-1;;13293:19:15;;;;13290:75;;-1:-1:-1;;;;;13340:14:15;;;;;;:7;:14;;;;;13333:21;;;13290:75;13375:40;13393:4;13399:5;13406:8;13375:9;:40::i;:::-;13439:25;13448:5;13455:8;13439:25;;;;;;;:::i;5083:304:5:-;5231:28;5241:4;5247:2;5251:7;5231:9;:28::i;:::-;5277:48;5300:4;5306:2;5310:7;5319:5;5277:22;:48::i;:::-;5269:111;;;;-1:-1:-1;;;5269:111:5;;;;;;;:::i;328:703:14:-;384:13;601:10;597:51;;-1:-1:-1;627:10:14;;;;;;;;;;;;-1:-1:-1;;;627:10:14;;;;;;597:51;672:5;657:12;711:75;718:9;;711:75;;743:8;;;;:::i;:::-;;-1:-1:-1;765:10:14;;-1:-1:-1;773:2:14;765:10;;:::i;:::-;;;711:75;;;795:19;827:6;-1:-1:-1;;;;;817:17:14;;;;;-1:-1:-1;;;817:17:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;817:17:14;;795:39;;844:150;851:10;;844:150;;877:11;887:1;877:11;;:::i;:::-;;-1:-1:-1;945:10:14;953:2;945:5;:10;:::i;:::-;932:24;;:2;:24;:::i;:::-;919:39;;902:6;909;902:14;;;;;;-1:-1:-1;;;902:14:14;;;;;;;;;;;;:56;-1:-1:-1;;;;;902:56:14;;;;;;;;-1:-1:-1;972:11:14;981:2;972:11;;:::i;:::-;;;844:150;;1839:189:12;1189:12;:10;:12::i;:::-;-1:-1:-1;;;;;1178:23:12;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1178:23:12;;1170:68;;;;-1:-1:-1;;;1170:68:12;;;;;;;:::i;:::-;-1:-1:-1;;;;;1927:22:12;::::1;1919:73;;;;-1:-1:-1::0;;;1919:73:12::1;;;;;;;:::i;:::-;2002:19;2012:8;2002:9;:19::i;763:155:3:-:0;-1:-1:-1;;;;;;871:40:3;;-1:-1:-1;;;871:40:3;763:155;;;:::o;9248:179:15:-;-1:-1:-1;;;;;9323:18:15;;;9319:50;;-1:-1:-1;;;;;9352:17:15;;;;;;:9;:17;;;;;9350:19;;9352:17;;;9350:19;;;:::i;:::-;;;;-1:-1:-1;9319:50:15;-1:-1:-1;;;;;9380:16:15;;;9376:46;;-1:-1:-1;;;;;9407:15:15;;;;;;:9;:15;;;;;9405:17;;9407:15;;;9405:17;;;:::i;:::-;;;;-1:-1:-1;9248:179:15;;:::o;13876:462::-;-1:-1:-1;;;;;13976:14:15;;13952:21;13976:14;;;:7;:14;;;;;;14000:332;-1:-1:-1;;;;;14018:26:15;;:19;:26;;;;;;;;;;:33;14016:35;;14000:332;;;-1:-1:-1;;;;;14076:26:15;;:19;:26;;;;;;;;;;:29;;14109:8;;14076:26;14103:1;;14076:29;;;;-1:-1:-1;;;14076:29:15;;;;;;;;;;;;;;;;;:41;14072:250;;;-1:-1:-1;;;;;14169:26:15;;:19;:26;;;;;;;;;;14196:33;;:37;;14232:1;;14196:37;:::i;:::-;14169:65;;;;;;-1:-1:-1;;;14169:65:15;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14137:26:15;;;;;;;;;;;;:29;;14164:1;;14137:29;;;;-1:-1:-1;;;14137:29:15;;;;;;;;;;;;;;;;;;;;:97;;;;-1:-1:-1;;;;;14252:26:15;;;;;;;;;;;:32;;;;;-1:-1:-1;;;14252:32:15;;;;;;;;;;;;;;;;;;;;;;;;;;14302:5;;14072:250;14053:3;;;;:::i;:::-;;;;14000:332;;3888:775:5;4035:4;4055:15;:2;-1:-1:-1;;;;;4055:13:5;;:15::i;:::-;4051:606;;;4106:2;-1:-1:-1;;;;;4090:36:5;;4127:12;:10;:12::i;:::-;4141:4;4147:7;4156:5;4090:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4090:72:5;;;;;;;;-1:-1:-1;;4090:72:5;;;;;;;;;;;;:::i;:::-;;;4086:519;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4329:13:5;;4325:266;;4371:60;;-1:-1:-1;;;4371:60:5;;;;;;;:::i;4325:266::-;4543:6;4537:13;4528:6;4524:2;4520:15;4513:38;4086:519;-1:-1:-1;;;;;;4212:51:5;-1:-1:-1;;;4212:51:5;;-1:-1:-1;4205:58:5;;4051:606;-1:-1:-1;4642:4:5;3888:775;;;;;;:::o;718:377:0:-;1034:20;1080:8;;;718:377::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:175:16;84:20;;-1:-1:-1;;;;;133:31:16;;123:42;;113:2;;179:1;176;169:12;194:400;;;327:3;320:4;312:6;308:17;304:27;294:2;;350:6;342;335:22;294:2;-1:-1:-1;378:20:16;;-1:-1:-1;;;;;410:30:16;;407:2;;;460:8;450;443:26;407:2;504:4;496:6;492:17;480:29;;567:3;560:4;552;544:6;540:17;532:6;528:30;524:41;521:50;518:2;;;584:1;581;574:12;518:2;284:310;;;;;:::o;599:162::-;666:20;;722:13;;715:21;705:32;;695:2;;751:1;748;741:12;766:377;;;883:3;876:4;868:6;864:17;860:27;850:2;;908:8;898;891:26;850:2;-1:-1:-1;938:20:16;;-1:-1:-1;;;;;970:30:16;;967:2;;;1020:8;1010;1003:26;967:2;1064:4;1056:6;1052:17;1040:29;;1116:3;1109:4;1100:6;1092;1088:19;1084:30;1081:39;1078:2;;;1133:1;1130;1123:12;1148:198;;1260:2;1248:9;1239:7;1235:23;1231:32;1228:2;;;1281:6;1273;1266:22;1228:2;1309:31;1330:9;1309:31;:::i;1351:274::-;;;1480:2;1468:9;1459:7;1455:23;1451:32;1448:2;;;1501:6;1493;1486:22;1448:2;1529:31;1550:9;1529:31;:::i;:::-;1519:41;;1579:40;1615:2;1604:9;1600:18;1579:40;:::i;:::-;1569:50;;1438:187;;;;;:::o;1630:936::-;;;;;;;1847:3;1835:9;1826:7;1822:23;1818:33;1815:2;;;1869:6;1861;1854:22;1815:2;1897:31;1918:9;1897:31;:::i;:::-;1887:41;;1947:40;1983:2;1972:9;1968:18;1947:40;:::i;:::-;1937:50;;2038:2;2027:9;2023:18;2010:32;-1:-1:-1;;;;;2102:2:16;2094:6;2091:14;2088:2;;;2123:6;2115;2108:22;2088:2;2167:76;2235:7;2226:6;2215:9;2211:22;2167:76;:::i;:::-;2262:8;;-1:-1:-1;2141:102:16;-1:-1:-1;2350:2:16;2335:18;;2322:32;;-1:-1:-1;2366:16:16;;;2363:2;;;2400:6;2392;2385:22;2363:2;;2444:62;2498:7;2487:8;2476:9;2472:24;2444:62;:::i;:::-;1805:761;;;;-1:-1:-1;1805:761:16;;-1:-1:-1;1805:761:16;;2525:8;;1805:761;-1:-1:-1;;;1805:761:16:o;2571:342::-;;;;2717:2;2705:9;2696:7;2692:23;2688:32;2685:2;;;2738:6;2730;2723:22;2685:2;2766:31;2787:9;2766:31;:::i;:::-;2756:41;;2816:40;2852:2;2841:9;2837:18;2816:40;:::i;:::-;2806:50;;2903:2;2892:9;2888:18;2875:32;2865:42;;2675:238;;;;;:::o;2918:1178::-;;;;;3090:3;3078:9;3069:7;3065:23;3061:33;3058:2;;;3112:6;3104;3097:22;3058:2;3140:31;3161:9;3140:31;:::i;:::-;3130:41;;3190:2;3211:40;3247:2;3236:9;3232:18;3211:40;:::i;:::-;3201:50;;3298:2;3287:9;3283:18;3270:32;3260:42;;3353:2;3342:9;3338:18;3325:32;-1:-1:-1;;;;;3417:2:16;3409:6;3406:14;3403:2;;;3438:6;3430;3423:22;3403:2;3481:6;3470:9;3466:22;3456:32;;3526:7;3519:4;3515:2;3511:13;3507:27;3497:2;;3553:6;3545;3538:22;3497:2;3594;3581:16;3616:2;3612;3609:10;3606:2;;;3622:18;;:::i;:::-;3671:2;3665:9;3740:2;3721:13;;-1:-1:-1;;3717:27:16;3705:40;;3701:49;;3765:18;;;3785:22;;;3762:46;3759:2;;;3811:18;;:::i;:::-;3847:2;3840:22;3871:18;;;3908:11;;;3904:20;;3901:33;-1:-1:-1;3898:2:16;;;3952:6;3944;3937:22;3898:2;4013;4008;4004;4000:11;3995:2;3987:6;3983:15;3970:46;4036:15;;;4032:24;;;4025:40;;;;-1:-1:-1;3048:1048:16;;;;-1:-1:-1;3048:1048:16;;-1:-1:-1;;3048:1048:16:o;4101:539::-;;;;4265:2;4253:9;4244:7;4240:23;4236:32;4233:2;;;4286:6;4278;4271:22;4233:2;4314:31;4335:9;4314:31;:::i;:::-;4304:41;;4396:2;4385:9;4381:18;4368:32;-1:-1:-1;;;;;4415:6:16;4412:30;4409:2;;;4460:6;4452;4445:22;4409:2;4504:76;4572:7;4563:6;4552:9;4548:22;4504:76;:::i;:::-;4223:417;;4599:8;;-1:-1:-1;4478:102:16;;-1:-1:-1;;;;4223:417:16:o;4645:268::-;;;4771:2;4759:9;4750:7;4746:23;4742:32;4739:2;;;4792:6;4784;4777:22;4739:2;4820:31;4841:9;4820:31;:::i;:::-;4810:41;;4870:37;4903:2;4892:9;4888:18;4870:37;:::i;4918:266::-;;;5047:2;5035:9;5026:7;5022:23;5018:32;5015:2;;;5068:6;5060;5053:22;5015:2;5096:31;5117:9;5096:31;:::i;:::-;5086:41;5174:2;5159:18;;;;5146:32;;-1:-1:-1;;;5005:179:16:o;5189:531::-;;;;5353:2;5341:9;5332:7;5328:23;5324:32;5321:2;;;5374:6;5366;5359:22;5321:2;5419:9;5406:23;-1:-1:-1;;;;;5444:6:16;5441:30;5438:2;;;5489:6;5481;5474:22;5438:2;5533:76;5601:7;5592:6;5581:9;5577:22;5533:76;:::i;:::-;5628:8;;5507:102;;-1:-1:-1;5710:2:16;5695:18;;;;5682:32;;5311:409;-1:-1:-1;;;;5311:409:16:o;5725:463::-;;;5872:2;5860:9;5851:7;5847:23;5843:32;5840:2;;;5893:6;5885;5878:22;5840:2;5938:9;5925:23;-1:-1:-1;;;;;5963:6:16;5960:30;5957:2;;;6008:6;6000;5993:22;5957:2;6052:76;6120:7;6111:6;6100:9;6096:22;6052:76;:::i;:::-;6147:8;;6026:102;;-1:-1:-1;5830:358:16;-1:-1:-1;;;;5830:358:16:o;6193:815::-;;;;;6392:2;6380:9;6371:7;6367:23;6363:32;6360:2;;;6413:6;6405;6398:22;6360:2;6458:9;6445:23;-1:-1:-1;;;;;6528:2:16;6520:6;6517:14;6514:2;;;6549:6;6541;6534:22;6514:2;6593:76;6661:7;6652:6;6641:9;6637:22;6593:76;:::i;:::-;6688:8;;-1:-1:-1;6567:102:16;-1:-1:-1;6776:2:16;6761:18;;6748:32;;-1:-1:-1;6792:16:16;;;6789:2;;;6826:6;6818;6811:22;6789:2;;6870:78;6940:7;6929:8;6918:9;6914:24;6870:78;:::i;:::-;6350:658;;;;-1:-1:-1;6967:8:16;-1:-1:-1;;;;6350:658:16:o;7013:192::-;;7122:2;7110:9;7101:7;7097:23;7093:32;7090:2;;;7143:6;7135;7128:22;7090:2;7171:28;7189:9;7171:28;:::i;7210:533::-;;;;7371:2;7359:9;7350:7;7346:23;7342:32;7339:2;;;7392:6;7384;7377:22;7339:2;7420:28;7438:9;7420:28;:::i;:::-;7410:38;;7499:2;7488:9;7484:18;7471:32;-1:-1:-1;;;;;7518:6:16;7515:30;7512:2;;;7563:6;7555;7548:22;7748:257;;7859:2;7847:9;7838:7;7834:23;7830:32;7827:2;;;7880:6;7872;7865:22;7827:2;7924:9;7911:23;7943:32;7969:5;7943:32;:::i;8010:261::-;;8132:2;8120:9;8111:7;8107:23;8103:32;8100:2;;;8153:6;8145;8138:22;8100:2;8190:9;8184:16;8209:32;8235:5;8209:32;:::i;8276:753::-;;;;;8445:2;8433:9;8424:7;8420:23;8416:32;8413:2;;;8466:6;8458;8451:22;8413:2;8511:9;8498:23;-1:-1:-1;;;;;8581:2:16;8573:6;8570:14;8567:2;;;8602:6;8594;8587:22;8567:2;8646:60;8698:7;8689:6;8678:9;8674:22;8646:60;:::i;:::-;8725:8;;-1:-1:-1;8620:86:16;-1:-1:-1;8813:2:16;8798:18;;8785:32;;-1:-1:-1;8829:16:16;;;8826:2;;;8863:6;8855;8848:22;8826:2;;8907:62;8961:7;8950:8;8939:9;8935:24;8907:62;:::i;9034:190::-;;9146:2;9134:9;9125:7;9121:23;9117:32;9114:2;;;9167:6;9159;9152:22;9114:2;-1:-1:-1;9195:23:16;;9104:120;-1:-1:-1;9104:120:16:o;9229:259::-;;9310:5;9304:12;9337:6;9332:3;9325:19;9353:63;9409:6;9402:4;9397:3;9393:14;9386:4;9379:5;9375:16;9353:63;:::i;:::-;9470:2;9449:15;-1:-1:-1;;9445:29:16;9436:39;;;;9477:4;9432:50;;9280:208;-1:-1:-1;;9280:208:16:o;9493:982::-;9580:12;;9493:982;;9652:1;9637:17;;9673:1;9709:18;;;;9736:2;;9790:4;9782:6;9778:17;9768:27;;9736:2;9816;9864;9856:6;9853:14;9833:18;9830:38;9827:2;;;-1:-1:-1;;;9891:33:16;;9947:4;9944:1;9937:15;9977:4;9898:3;9965:17;9827:2;10008:18;10035:104;;;;10153:1;10148:321;;;;10001:468;;10035:104;-1:-1:-1;;10068:24:16;;10056:37;;10113:16;;;;-1:-1:-1;10035:104:16;;10148:321;10184:38;10216:5;10184:38;:::i;:::-;10244:1;10258:165;10272:6;10269:1;10266:13;10258:165;;;10350:14;;10337:11;;;10330:35;10393:16;;;;10287:10;;10258:165;;;10262:3;;10452:6;10447:3;10443:16;10436:23;;10001:468;;;;;;;9553:922;;;;:::o;10480:460::-;;10729:40;10765:3;10757:6;10729:40;:::i;:::-;10798:6;10792:13;10814:52;10859:6;10855:2;10848:4;10840:6;10836:17;10814:52;:::i;:::-;10882;10926:6;10922:2;10918:15;10910:6;10882:52;:::i;:::-;10875:59;10709:231;-1:-1:-1;;;;;;;10709:231:16:o;10945:205::-;11145:3;11136:14::o;11155:203::-;-1:-1:-1;;;;;11319:32:16;;;;11301:51;;11289:2;11274:18;;11256:102::o;11363:490::-;-1:-1:-1;;;;;11632:15:16;;;11614:34;;11684:15;;11679:2;11664:18;;11657:43;11731:2;11716:18;;11709:34;;;11779:3;11774:2;11759:18;;11752:31;;;11363:490;;11800:47;;11827:19;;11819:6;11800:47;:::i;:::-;11792:55;11566:287;-1:-1:-1;;;;;;11566:287:16:o;11858:284::-;-1:-1:-1;;;;;12044:32:16;;;;12026:51;;12120:14;12113:22;12108:2;12093:18;;12086:50;12014:2;11999:18;;11981:161::o;12147:274::-;-1:-1:-1;;;;;12339:32:16;;;;12321:51;;12403:2;12388:18;;12381:34;12309:2;12294:18;;12276:145::o;12426:645::-;12591:2;12643:21;;;12713:13;;12616:18;;;12735:22;;;12426:645;;12591:2;12814:15;;;;12788:2;12773:18;;;12426:645;12860:185;12874:6;12871:1;12868:13;12860:185;;;12949:13;;12942:21;12935:29;12923:42;;13020:15;;;;12985:12;;;;12896:1;12889:9;12860:185;;;-1:-1:-1;13062:3:16;;12571:500;-1:-1:-1;;;;;;12571:500:16:o;13076:635::-;13247:2;13299:21;;;13369:13;;13272:18;;;13391:22;;;13076:635;;13247:2;13470:15;;;;13444:2;13429:18;;;13076:635;13516:169;13530:6;13527:1;13524:13;13516:169;;;13591:13;;13579:26;;13660:15;;;;13625:12;;;;13552:1;13545:9;13516:169;;13716:187;13881:14;;13874:22;13856:41;;13844:2;13829:18;;13811:92::o;13908:221::-;;14057:2;14046:9;14039:21;14077:46;14119:2;14108:9;14104:18;14096:6;14077:46;:::i;14134:340::-;14336:2;14318:21;;;14375:2;14355:18;;;14348:30;-1:-1:-1;;;14409:2:16;14394:18;;14387:46;14465:2;14450:18;;14308:166::o;14479:352::-;14681:2;14663:21;;;14720:2;14700:18;;;14693:30;14759;14754:2;14739:18;;14732:58;14822:2;14807:18;;14653:178::o;14836:348::-;15038:2;15020:21;;;15077:2;15057:18;;;15050:30;15116:26;15111:2;15096:18;;15089:54;15175:2;15160:18;;15010:174::o;15189:407::-;15391:2;15373:21;;;15430:2;15410:18;;;15403:30;15469:34;15464:2;15449:18;;15442:62;-1:-1:-1;;;15535:2:16;15520:18;;15513:41;15586:3;15571:19;;15363:233::o;15601:402::-;15803:2;15785:21;;;15842:2;15822:18;;;15815:30;15881:34;15876:2;15861:18;;15854:62;-1:-1:-1;;;15947:2:16;15932:18;;15925:36;15993:3;15978:19;;15775:228::o;16008:414::-;16210:2;16192:21;;;16249:2;16229:18;;;16222:30;16288:34;16283:2;16268:18;;16261:62;-1:-1:-1;;;16354:2:16;16339:18;;16332:48;16412:3;16397:19;;16182:240::o;16427:398::-;16629:2;16611:21;;;16668:2;16648:18;;;16641:30;16707:34;16702:2;16687:18;;16680:62;-1:-1:-1;;;16773:2:16;16758:18;;16751:32;16815:3;16800:19;;16601:224::o;16830:402::-;17032:2;17014:21;;;17071:2;17051:18;;;17044:30;17110:34;17105:2;17090:18;;17083:62;-1:-1:-1;;;17176:2:16;17161:18;;17154:36;17222:3;17207:19;;17004:228::o;17237:397::-;17439:2;17421:21;;;17478:2;17458:18;;;17451:30;17517:34;17512:2;17497:18;;17490:62;-1:-1:-1;;;17583:2:16;17568:18;;17561:31;17624:3;17609:19;;17411:223::o;17639:405::-;17841:2;17823:21;;;17880:2;17860:18;;;17853:30;17919:34;17914:2;17899:18;;17892:62;-1:-1:-1;;;17985:2:16;17970:18;;17963:39;18034:3;18019:19;;17813:231::o;18049:349::-;18251:2;18233:21;;;18290:2;18270:18;;;18263:30;18329:27;18324:2;18309:18;;18302:55;18389:2;18374:18;;18223:175::o;18403:353::-;18605:2;18587:21;;;18644:2;18624:18;;;18617:30;18683:31;18678:2;18663:18;;18656:59;18747:2;18732:18;;18577:179::o;18761:408::-;18963:2;18945:21;;;19002:2;18982:18;;;18975:30;19041:34;19036:2;19021:18;;19014:62;-1:-1:-1;;;19107:2:16;19092:18;;19085:42;19159:3;19144:19;;18935:234::o;19174:352::-;19376:2;19358:21;;;19415:2;19395:18;;;19388:30;19454;19449:2;19434:18;;19427:58;19517:2;19502:18;;19348:178::o;19531:398::-;19733:2;19715:21;;;19772:2;19752:18;;;19745:30;19811:34;19806:2;19791:18;;19784:62;-1:-1:-1;;;19877:2:16;19862:18;;19855:32;19919:3;19904:19;;19705:224::o;19934:413::-;20136:2;20118:21;;;20175:2;20155:18;;;20148:30;20214:34;20209:2;20194:18;;20187:62;-1:-1:-1;;;20280:2:16;20265:18;;20258:47;20337:3;20322:19;;20108:239::o;20352:420::-;20554:2;20536:21;;;20593:2;20573:18;;;20566:30;20632:34;20627:2;20612:18;;20605:62;20703:26;20698:2;20683:18;;20676:54;20762:3;20747:19;;20526:246::o;20777:356::-;20979:2;20961:21;;;20998:18;;;20991:30;21057:34;21052:2;21037:18;;21030:62;21124:2;21109:18;;20951:182::o;21138:408::-;21340:2;21322:21;;;21379:2;21359:18;;;21352:30;21418:34;21413:2;21398:18;;21391:62;-1:-1:-1;;;21484:2:16;21469:18;;21462:42;21536:3;21521:19;;21312:234::o;21551:356::-;21753:2;21735:21;;;21772:18;;;21765:30;21831:34;21826:2;21811:18;;21804:62;21898:2;21883:18;;21725:182::o;21912:417::-;22114:2;22096:21;;;22153:2;22133:18;;;22126:30;22192:34;22187:2;22172:18;;22165:62;-1:-1:-1;;;22258:2:16;22243:18;;22236:51;22319:3;22304:19;;22086:243::o;22334:406::-;22536:2;22518:21;;;22575:2;22555:18;;;22548:30;22614:34;22609:2;22594:18;;22587:62;-1:-1:-1;;;22680:2:16;22665:18;;22658:40;22730:3;22715:19;;22508:232::o;22745:397::-;22947:2;22929:21;;;22986:2;22966:18;;;22959:30;23025:34;23020:2;23005:18;;22998:62;-1:-1:-1;;;23091:2:16;23076:18;;23069:31;23132:3;23117:19;;22919:223::o;23147:399::-;23349:2;23331:21;;;23388:2;23368:18;;;23361:30;23427:34;23422:2;23407:18;;23400:62;-1:-1:-1;;;23493:2:16;23478:18;;23471:33;23536:3;23521:19;;23321:225::o;23551:356::-;23753:2;23735:21;;;23772:18;;;23765:30;23831:34;23826:2;23811:18;;23804:62;23898:2;23883:18;;23725:182::o;23912:402::-;24114:2;24096:21;;;24153:2;24133:18;;;24126:30;24192:34;24187:2;24172:18;;24165:62;-1:-1:-1;;;24258:2:16;24243:18;;24236:36;24304:3;24289:19;;24086:228::o;24319:405::-;24521:2;24503:21;;;24560:2;24540:18;;;24533:30;24599:34;24594:2;24579:18;;24572:62;-1:-1:-1;;;24665:2:16;24650:18;;24643:39;24714:3;24699:19;;24493:231::o;24729:413::-;24931:2;24913:21;;;24970:2;24950:18;;;24943:30;25009:34;25004:2;24989:18;;24982:62;-1:-1:-1;;;25075:2:16;25060:18;;25053:47;25132:3;25117:19;;24903:239::o;25147:355::-;25349:2;25331:21;;;25388:2;25368:18;;;25361:30;25427:33;25422:2;25407:18;;25400:61;25493:2;25478:18;;25321:181::o;25507:415::-;25709:2;25691:21;;;25748:2;25728:18;;;25721:30;25787:34;25782:2;25767:18;;25760:62;-1:-1:-1;;;25853:2:16;25838:18;;25831:49;25912:3;25897:19;;25681:241::o;25927:411::-;26129:2;26111:21;;;26168:2;26148:18;;;26141:30;26207:34;26202:2;26187:18;;26180:62;-1:-1:-1;;;26273:2:16;26258:18;;26251:45;26328:3;26313:19;;26101:237::o;26343:177::-;26489:25;;;26477:2;26462:18;;26444:76::o;26525:129::-;;26593:17;;;26643:4;26627:21;;;26583:71::o;26659:128::-;;26730:1;26726:6;26723:1;26720:13;26717:2;;;26736:18;;:::i;:::-;-1:-1:-1;26772:9:16;;26707:80::o;26792:120::-;;26858:1;26848:2;;26863:18;;:::i;:::-;-1:-1:-1;26897:9:16;;26838:74::o;26917:125::-;;26985:1;26982;26979:8;26976:2;;;26990:18;;:::i;:::-;-1:-1:-1;27027:9:16;;26966:76::o;27047:258::-;27119:1;27129:113;27143:6;27140:1;27137:13;27129:113;;;27219:11;;;27213:18;27200:11;;;27193:39;27165:2;27158:10;27129:113;;;27260:6;27257:1;27254:13;27251:2;;;-1:-1:-1;;27295:1:16;27277:16;;27270:27;27100:205::o;27310:136::-;;27377:5;27367:2;;27386:18;;:::i;:::-;-1:-1:-1;;;27422:18:16;;27357:89::o;27451:380::-;27536:1;27526:12;;27583:1;27573:12;;;27594:2;;27648:4;27640:6;27636:17;27626:27;;27594:2;27701;27693:6;27690:14;27670:18;27667:38;27664:2;;;27747:10;27742:3;27738:20;27735:1;27728:31;27782:4;27779:1;27772:15;27810:4;27807:1;27800:15;27664:2;;27506:325;;;:::o;27836:135::-;;-1:-1:-1;;27896:17:16;;27893:2;;;27916:18;;:::i;:::-;-1:-1:-1;27963:1:16;27952:13;;27883:88::o;27976:112::-;;28034:1;28024:2;;28039:18;;:::i;:::-;-1:-1:-1;28073:9:16;;28014:74::o;28093:127::-;28154:10;28149:3;28145:20;28142:1;28135:31;28185:4;28182:1;28175:15;28209:4;28206:1;28199:15;28225:127;28286:10;28281:3;28277:20;28274:1;28267:31;28317:4;28314:1;28307:15;28341:4;28338:1;28331:15;28357:127;28418:10;28413:3;28409:20;28406:1;28399:31;28449:4;28446:1;28439:15;28473:4;28470:1;28463:15;28489:133;-1:-1:-1;;;;;;28565:32:16;;28555:43;;28545:2;;28612:1;28609;28602:12

Swarm Source

ipfs://ba44ad10da173e35bddca1dd61fc16c1c5f99097bbcfe2dbf04fa6586cd7aa57
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.