ETH Price: $3,831.99 (-0.44%)

Token

Goddess (GODDESS)
 

Overview

Max Total Supply

686 GODDESS

Holders

62

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0xb24cedb4f9b37aa88e97b6e41e9d92ea1f48c79f
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:
Goddess

Compiler Version
v0.5.17+commit.d19bba13

Optimization Enabled:
Yes with 10000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-11-03
*/

// File: multi-token-standard/contracts/interfaces/IERC165.sol

pragma solidity ^0.5.12;


/**
 * @title ERC165
 * @dev https://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md
 */
interface IERC165 {

    /**
     * @notice Query if a contract implements an interface
     * @dev Interface identification is specified in ERC-165. This function
     * uses less than 30,000 gas
     * @param _interfaceId The interface identifier, as specified in ERC-165
     */
    function supportsInterface(bytes4 _interfaceId)
    external
    view
    returns (bool);
}

// File: multi-token-standard/contracts/utils/SafeMath.sol

pragma solidity ^0.5.12;


/**
 * @title SafeMath
 * @dev Unsigned math operations with safety checks that revert on error
 */
library SafeMath {

  /**
   * @dev Multiplies two unsigned integers, reverts on overflow.
   */
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
    // benefit is lost if 'b' is also tested.
    // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
    if (a == 0) {
      return 0;
    }

    uint256 c = a * b;
    require(c / a == b, "SafeMath#mul: OVERFLOW");

    return c;
  }

  /**
   * @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero.
   */
  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    // Solidity only automatically asserts when dividing by 0
    require(b > 0, "SafeMath#div: DIVISION_BY_ZERO");
    uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold

    return c;
  }

  /**
   * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend).
   */
  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    require(b <= a, "SafeMath#sub: UNDERFLOW");
    uint256 c = a - b;

    return c;
  }

  /**
   * @dev Adds two unsigned integers, reverts on overflow.
   */
  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    require(c >= a, "SafeMath#add: OVERFLOW");

    return c; 
  }

  /**
   * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo),
   * reverts when dividing by zero.
   */
  function mod(uint256 a, uint256 b) internal pure returns (uint256) {
    require(b != 0, "SafeMath#mod: DIVISION_BY_ZERO");
    return a % b;
  }

}

// File: multi-token-standard/contracts/interfaces/IERC1155TokenReceiver.sol

pragma solidity ^0.5.12;

/**
 * @dev ERC-1155 interface for accepting safe transfers.
 */
interface IERC1155TokenReceiver {

  /**
   * @notice Handle the receipt of a single ERC1155 token type
   * @dev An ERC1155-compliant smart contract MUST call this function on the token recipient contract, at the end of a `safeTransferFrom` after the balance has been updated
   * This function MAY throw to revert and reject the transfer
   * Return of other amount than the magic value MUST result in the transaction being reverted
   * Note: The token contract address is always the message sender
   * @param _operator  The address which called the `safeTransferFrom` function
   * @param _from      The address which previously owned the token
   * @param _id        The id of the token being transferred
   * @param _amount    The amount of tokens being transferred
   * @param _data      Additional data with no specified format
   * @return           `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
   */
  function onERC1155Received(address _operator, address _from, uint256 _id, uint256 _amount, bytes calldata _data) external returns(bytes4);

  /**
   * @notice Handle the receipt of multiple ERC1155 token types
   * @dev An ERC1155-compliant smart contract MUST call this function on the token recipient contract, at the end of a `safeBatchTransferFrom` after the balances have been updated
   * This function MAY throw to revert and reject the transfer
   * Return of other amount than the magic value WILL result in the transaction being reverted
   * Note: The token contract address is always the message sender
   * @param _operator  The address which called the `safeBatchTransferFrom` function
   * @param _from      The address which previously owned the token
   * @param _ids       An array containing ids of each token being transferred
   * @param _amounts   An array containing amounts of each token being transferred
   * @param _data      Additional data with no specified format
   * @return           `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
   */
  function onERC1155BatchReceived(address _operator, address _from, uint256[] calldata _ids, uint256[] calldata _amounts, bytes calldata _data) external returns(bytes4);

  /**
   * @notice Indicates whether a contract implements the `ERC1155TokenReceiver` functions and so can accept ERC1155 token types.
   * @param  interfaceID The ERC-165 interface ID that is queried for support.s
   * @dev This function MUST return true if it implements the ERC1155TokenReceiver interface and ERC-165 interface.
   *      This function MUST NOT consume more than 5,000 gas.
   * @return Wheter ERC-165 or ERC1155TokenReceiver interfaces are supported.
   */
  function supportsInterface(bytes4 interfaceID) external view returns (bool);

}

// File: multi-token-standard/contracts/interfaces/IERC1155.sol

pragma solidity ^0.5.12;


interface IERC1155 {
  // Events

  /**
   * @dev Either TransferSingle or TransferBatch MUST emit when tokens are transferred, including zero amount transfers as well as minting or burning
   *   Operator MUST be msg.sender
   *   When minting/creating tokens, the `_from` field MUST be set to `0x0`
   *   When burning/destroying tokens, the `_to` field MUST be set to `0x0`
   *   The total amount transferred from address 0x0 minus the total amount transferred to 0x0 may be used by clients and exchanges to be added to the "circulating supply" for a given token ID
   *   To broadcast the existence of a token ID with no initial balance, the contract SHOULD emit the TransferSingle event from `0x0` to `0x0`, with the token creator as `_operator`, and a `_amount` of 0
   */
  event TransferSingle(address indexed _operator, address indexed _from, address indexed _to, uint256 _id, uint256 _amount);

  /**
   * @dev Either TransferSingle or TransferBatch MUST emit when tokens are transferred, including zero amount transfers as well as minting or burning
   *   Operator MUST be msg.sender
   *   When minting/creating tokens, the `_from` field MUST be set to `0x0`
   *   When burning/destroying tokens, the `_to` field MUST be set to `0x0`
   *   The total amount transferred from address 0x0 minus the total amount transferred to 0x0 may be used by clients and exchanges to be added to the "circulating supply" for a given token ID
   *   To broadcast the existence of multiple token IDs with no initial balance, this SHOULD emit the TransferBatch event from `0x0` to `0x0`, with the token creator as `_operator`, and a `_amount` of 0
   */
  event TransferBatch(address indexed _operator, address indexed _from, address indexed _to, uint256[] _ids, uint256[] _amounts);

  /**
   * @dev MUST emit when an approval is updated
   */
  event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);

  /**
   * @dev MUST emit when the URI is updated for a token ID
   *   URIs are defined in RFC 3986
   *   The URI MUST point a JSON file that conforms to the "ERC-1155 Metadata JSON Schema"
   */
  event URI(string _amount, uint256 indexed _id);

  /**
   * @notice Transfers amount of an _id from the _from address to the _to address specified
   * @dev MUST emit TransferSingle event on success
   * Caller must be approved to manage the _from account's tokens (see isApprovedForAll)
   * MUST throw if `_to` is the zero address
   * MUST throw if balance of sender for token `_id` is lower than the `_amount` sent
   * MUST throw on any other error
   * When transfer is complete, this function MUST check if `_to` is a smart contract (code size > 0). If so, it MUST call `onERC1155Received` on `_to` and revert if the return amount is not `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
   * @param _from    Source address
   * @param _to      Target address
   * @param _id      ID of the token type
   * @param _amount  Transfered amount
   * @param _data    Additional data with no specified format, sent in call to `_to`
   */
  function safeTransferFrom(address _from, address _to, uint256 _id, uint256 _amount, bytes calldata _data) external;

  /**
   * @notice Send multiple types of Tokens from the _from address to the _to address (with safety call)
   * @dev MUST emit TransferBatch event on success
   * Caller must be approved to manage the _from account's tokens (see isApprovedForAll)
   * MUST throw if `_to` is the zero address
   * MUST throw if length of `_ids` is not the same as length of `_amounts`
   * MUST throw if any of the balance of sender for token `_ids` is lower than the respective `_amounts` sent
   * MUST throw on any other error
   * When transfer is complete, this function MUST check if `_to` is a smart contract (code size > 0). If so, it MUST call `onERC1155BatchReceived` on `_to` and revert if the return amount is not `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
   * Transfers and events MUST occur in the array order they were submitted (_ids[0] before _ids[1], etc)
   * @param _from     Source addresses
   * @param _to       Target addresses
   * @param _ids      IDs of each token type
   * @param _amounts  Transfer amounts per token type
   * @param _data     Additional data with no specified format, sent in call to `_to`
  */
  function safeBatchTransferFrom(address _from, address _to, uint256[] calldata _ids, uint256[] calldata _amounts, bytes calldata _data) external;
  
  /**
   * @notice Get the balance of an account's Tokens
   * @param _owner  The address of the token holder
   * @param _id     ID of the Token
   * @return        The _owner's balance of the Token type requested
   */
  function balanceOf(address _owner, uint256 _id) external view returns (uint256);

  /**
   * @notice Get the balance of multiple account/token pairs
   * @param _owners The addresses of the token holders
   * @param _ids    ID of the Tokens
   * @return        The _owner's balance of the Token types requested (i.e. balance for each (owner, id) pair)
   */
  function balanceOfBatch(address[] calldata _owners, uint256[] calldata _ids) external view returns (uint256[] memory);

  /**
   * @notice Enable or disable approval for a third party ("operator") to manage all of caller's tokens
   * @dev MUST emit the ApprovalForAll event on success
   * @param _operator  Address to add to the set of authorized operators
   * @param _approved  True if the operator is approved, false to revoke approval
   */
  function setApprovalForAll(address _operator, bool _approved) external;

  /**
   * @notice Queries the approval status of an operator for a given owner
   * @param _owner     The owner of the Tokens
   * @param _operator  Address of authorized operator
   * @return           True if the operator is approved, false if not
   */
  function isApprovedForAll(address _owner, address _operator) external view returns (bool isOperator);

}

// File: multi-token-standard/contracts/utils/Address.sol

/**
 * Copyright 2018 ZeroEx Intl.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *   http://www.apache.org/licenses/LICENSE-2.0
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

pragma solidity ^0.5.12;


/**
 * Utility library of inline functions on addresses
 */
library Address {

  /**
   * Returns whether the target address is a contract
   * @dev This function will return false if invoked during the constructor of a contract,
   * as the code is not actually created until after the constructor finishes.
   * @param account address of the account to check
   * @return whether the target address is a contract
   */
  function isContract(address account) internal view returns (bool) {
    bytes32 codehash;
    bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;

    // XXX Currently there is no better way to check if there is a contract in an address
    // than to check the size of the code at that address.
    // See https://ethereum.stackexchange.com/a/14016/36603
    // for more details about how this works.
    // TODO Check this again before the Serenity release, because all addresses will be
    // contracts then.
    assembly { codehash := extcodehash(account) }
    return (codehash != 0x0 && codehash != accountHash);
  }

}

// File: multi-token-standard/contracts/tokens/ERC1155/ERC1155.sol

pragma solidity ^0.5.12;







/**
 * @dev Implementation of Multi-Token Standard contract
 */
contract ERC1155 is IERC165 {
  using SafeMath for uint256;
  using Address for address;


  /***********************************|
  |        Variables and Events       |
  |__________________________________*/

  // onReceive function signatures
  bytes4 constant internal ERC1155_RECEIVED_VALUE = 0xf23a6e61;
  bytes4 constant internal ERC1155_BATCH_RECEIVED_VALUE = 0xbc197c81;

  // Objects balances
  mapping (address => mapping(uint256 => uint256)) internal balances;

  // Operator Functions
  mapping (address => mapping(address => bool)) internal operators;

  // Events
  event TransferSingle(address indexed _operator, address indexed _from, address indexed _to, uint256 _id, uint256 _amount);
  event TransferBatch(address indexed _operator, address indexed _from, address indexed _to, uint256[] _ids, uint256[] _amounts);
  event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);
  event URI(string _uri, uint256 indexed _id);


  /***********************************|
  |     Public Transfer Functions     |
  |__________________________________*/

  /**
   * @notice Transfers amount amount of an _id from the _from address to the _to address specified
   * @param _from    Source address
   * @param _to      Target address
   * @param _id      ID of the token type
   * @param _amount  Transfered amount
   * @param _data    Additional data with no specified format, sent in call to `_to`
   */
  function safeTransferFrom(address _from, address _to, uint256 _id, uint256 _amount, bytes memory _data)
    public
  {
    require((msg.sender == _from) || isApprovedForAll(_from, msg.sender), "ERC1155#safeTransferFrom: INVALID_OPERATOR");
    require(_to != address(0),"ERC1155#safeTransferFrom: INVALID_RECIPIENT");
    // require(_amount >= balances[_from][_id]) is not necessary since checked with safemath operations

    _safeTransferFrom(_from, _to, _id, _amount);
    _callonERC1155Received(_from, _to, _id, _amount, _data);
  }

  /**
   * @notice Send multiple types of Tokens from the _from address to the _to address (with safety call)
   * @param _from     Source addresses
   * @param _to       Target addresses
   * @param _ids      IDs of each token type
   * @param _amounts  Transfer amounts per token type
   * @param _data     Additional data with no specified format, sent in call to `_to`
   */
  function safeBatchTransferFrom(address _from, address _to, uint256[] memory _ids, uint256[] memory _amounts, bytes memory _data)
    public
  {
    // Requirements
    require((msg.sender == _from) || isApprovedForAll(_from, msg.sender), "ERC1155#safeBatchTransferFrom: INVALID_OPERATOR");
    require(_to != address(0), "ERC1155#safeBatchTransferFrom: INVALID_RECIPIENT");

    _safeBatchTransferFrom(_from, _to, _ids, _amounts);
    _callonERC1155BatchReceived(_from, _to, _ids, _amounts, _data);
  }


  /***********************************|
  |    Internal Transfer Functions    |
  |__________________________________*/

  /**
   * @notice Transfers amount amount of an _id from the _from address to the _to address specified
   * @param _from    Source address
   * @param _to      Target address
   * @param _id      ID of the token type
   * @param _amount  Transfered amount
   */
  function _safeTransferFrom(address _from, address _to, uint256 _id, uint256 _amount)
    internal
  {
    // Update balances
    balances[_from][_id] = balances[_from][_id].sub(_amount); // Subtract amount
    balances[_to][_id] = balances[_to][_id].add(_amount);     // Add amount

    // Emit event
    emit TransferSingle(msg.sender, _from, _to, _id, _amount);
  }

  /**
   * @notice Verifies if receiver is contract and if so, calls (_to).onERC1155Received(...)
   */
  function _callonERC1155Received(address _from, address _to, uint256 _id, uint256 _amount, bytes memory _data)
    internal
  {
    // Check if recipient is contract
    if (_to.isContract()) {
      bytes4 retval = IERC1155TokenReceiver(_to).onERC1155Received(msg.sender, _from, _id, _amount, _data);
      require(retval == ERC1155_RECEIVED_VALUE, "ERC1155#_callonERC1155Received: INVALID_ON_RECEIVE_MESSAGE");
    }
  }

  /**
   * @notice Send multiple types of Tokens from the _from address to the _to address (with safety call)
   * @param _from     Source addresses
   * @param _to       Target addresses
   * @param _ids      IDs of each token type
   * @param _amounts  Transfer amounts per token type
   */
  function _safeBatchTransferFrom(address _from, address _to, uint256[] memory _ids, uint256[] memory _amounts)
    internal
  {
    require(_ids.length == _amounts.length, "ERC1155#_safeBatchTransferFrom: INVALID_ARRAYS_LENGTH");

    // Number of transfer to execute
    uint256 nTransfer = _ids.length;

    // Executing all transfers
    for (uint256 i = 0; i < nTransfer; i++) {
      // Update storage balance of previous bin
      balances[_from][_ids[i]] = balances[_from][_ids[i]].sub(_amounts[i]);
      balances[_to][_ids[i]] = balances[_to][_ids[i]].add(_amounts[i]);
    }

    // Emit event
    emit TransferBatch(msg.sender, _from, _to, _ids, _amounts);
  }

  /**
   * @notice Verifies if receiver is contract and if so, calls (_to).onERC1155BatchReceived(...)
   */
  function _callonERC1155BatchReceived(address _from, address _to, uint256[] memory _ids, uint256[] memory _amounts, bytes memory _data)
    internal
  {
    // Pass data if recipient is contract
    if (_to.isContract()) {
      bytes4 retval = IERC1155TokenReceiver(_to).onERC1155BatchReceived(msg.sender, _from, _ids, _amounts, _data);
      require(retval == ERC1155_BATCH_RECEIVED_VALUE, "ERC1155#_callonERC1155BatchReceived: INVALID_ON_RECEIVE_MESSAGE");
    }
  }


  /***********************************|
  |         Operator Functions        |
  |__________________________________*/

  /**
   * @notice Enable or disable approval for a third party ("operator") to manage all of caller's tokens
   * @param _operator  Address to add to the set of authorized operators
   * @param _approved  True if the operator is approved, false to revoke approval
   */
  function setApprovalForAll(address _operator, bool _approved)
    external
  {
    // Update operator status
    operators[msg.sender][_operator] = _approved;
    emit ApprovalForAll(msg.sender, _operator, _approved);
  }

  /**
   * @notice Queries the approval status of an operator for a given owner
   * @param _owner     The owner of the Tokens
   * @param _operator  Address of authorized operator
   * @return True if the operator is approved, false if not
   */
  function isApprovedForAll(address _owner, address _operator)
    public view returns (bool isOperator)
  {
    return operators[_owner][_operator];
  }


  /***********************************|
  |         Balance Functions         |
  |__________________________________*/

  /**
   * @notice Get the balance of an account's Tokens
   * @param _owner  The address of the token holder
   * @param _id     ID of the Token
   * @return The _owner's balance of the Token type requested
   */
  function balanceOf(address _owner, uint256 _id)
    public view returns (uint256)
  {
    return balances[_owner][_id];
  }

  /**
   * @notice Get the balance of multiple account/token pairs
   * @param _owners The addresses of the token holders
   * @param _ids    ID of the Tokens
   * @return        The _owner's balance of the Token types requested (i.e. balance for each (owner, id) pair)
   */
  function balanceOfBatch(address[] memory _owners, uint256[] memory _ids)
    public view returns (uint256[] memory)
  {
    require(_owners.length == _ids.length, "ERC1155#balanceOfBatch: INVALID_ARRAY_LENGTH");

    // Variables
    uint256[] memory batchBalances = new uint256[](_owners.length);

    // Iterate over each owner and token ID
    for (uint256 i = 0; i < _owners.length; i++) {
      batchBalances[i] = balances[_owners[i]][_ids[i]];
    }

    return batchBalances;
  }


  /***********************************|
  |          ERC165 Functions         |
  |__________________________________*/

  /**
   * INTERFACE_SIGNATURE_ERC165 = bytes4(keccak256("supportsInterface(bytes4)"));
   */
  bytes4 constant private INTERFACE_SIGNATURE_ERC165 = 0x01ffc9a7;

  /**
   * INTERFACE_SIGNATURE_ERC1155 =
   * bytes4(keccak256("safeTransferFrom(address,address,uint256,uint256,bytes)")) ^
   * bytes4(keccak256("safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)")) ^
   * bytes4(keccak256("balanceOf(address,uint256)")) ^
   * bytes4(keccak256("balanceOfBatch(address[],uint256[])")) ^
   * bytes4(keccak256("setApprovalForAll(address,bool)")) ^
   * bytes4(keccak256("isApprovedForAll(address,address)"));
   */
  bytes4 constant private INTERFACE_SIGNATURE_ERC1155 = 0xd9b67a26;

  /**
   * @notice Query if a contract implements an interface
   * @param _interfaceID  The interface identifier, as specified in ERC-165
   * @return `true` if the contract implements `_interfaceID` and
   */
  function supportsInterface(bytes4 _interfaceID) external view returns (bool) {
    if (_interfaceID == INTERFACE_SIGNATURE_ERC165 ||
        _interfaceID == INTERFACE_SIGNATURE_ERC1155) {
      return true;
    }
    return false;
  }

}

// File: multi-token-standard/contracts/tokens/ERC1155/ERC1155Metadata.sol

pragma solidity ^0.5.11;



/**
 * @notice Contract that handles metadata related methods.
 * @dev Methods assume a deterministic generation of URI based on token IDs.
 *      Methods also assume that URI uses hex representation of token IDs.
 */
contract ERC1155Metadata {

  // URI's default URI prefix
  string internal baseMetadataURI;
  event URI(string _uri, uint256 indexed _id);


  /***********************************|
  |     Metadata Public Function s    |
  |__________________________________*/

  /**
   * @notice A distinct Uniform Resource Identifier (URI) for a given token.
   * @dev URIs are defined in RFC 3986.
   *      URIs are assumed to be deterministically generated based on token ID
   *      Token IDs are assumed to be represented in their hex format in URIs
   * @return URI string
   */
  function uri(uint256 _id) public view returns (string memory) {
    return string(abi.encodePacked(baseMetadataURI, _uint2str(_id), ".json"));
  }


  /***********************************|
  |    Metadata Internal Functions    |
  |__________________________________*/

  /**
   * @notice Will emit default URI log event for corresponding token _id
   * @param _tokenIDs Array of IDs of tokens to log default URI
   */
  function _logURIs(uint256[] memory _tokenIDs) internal {
    string memory baseURL = baseMetadataURI;
    string memory tokenURI;

    for (uint256 i = 0; i < _tokenIDs.length; i++) {
      tokenURI = string(abi.encodePacked(baseURL, _uint2str(_tokenIDs[i]), ".json"));
      emit URI(tokenURI, _tokenIDs[i]);
    }
  }

  /**
   * @notice Will emit a specific URI log event for corresponding token
   * @param _tokenIDs IDs of the token corresponding to the _uris logged
   * @param _URIs    The URIs of the specified _tokenIDs
   */
  function _logURIs(uint256[] memory _tokenIDs, string[] memory _URIs) internal {
    require(_tokenIDs.length == _URIs.length, "ERC1155Metadata#_logURIs: INVALID_ARRAYS_LENGTH");
    for (uint256 i = 0; i < _tokenIDs.length; i++) {
      emit URI(_URIs[i], _tokenIDs[i]);
    }
  }

  /**
   * @notice Will update the base URL of token's URI
   * @param _newBaseMetadataURI New base URL of token's URI
   */
  function _setBaseMetadataURI(string memory _newBaseMetadataURI) internal {
    baseMetadataURI = _newBaseMetadataURI;
  }


  /***********************************|
  |    Utility Internal Functions     |
  |__________________________________*/

  /**
   * @notice Convert uint256 to string
   * @param _i Unsigned integer to convert to string
   */
  function _uint2str(uint256 _i) internal pure returns (string memory _uintAsString) {
    if (_i == 0) {
      return "0";
    }

    uint256 j = _i;
    uint256 ii = _i;
    uint256 len;

    // Get number of bytes
    while (j != 0) {
      len++;
      j /= 10;
    }

    bytes memory bstr = new bytes(len);
    uint256 k = len - 1;

    // Get each individual ASCII
    while (ii != 0) {
      bstr[k--] = byte(uint8(48 + ii % 10));
      ii /= 10;
    }

    // Convert to string
    return string(bstr);
  }

}

// File: multi-token-standard/contracts/tokens/ERC1155/ERC1155MintBurn.sol

pragma solidity ^0.5.12;



/**
 * @dev Multi-Fungible Tokens with minting and burning methods. These methods assume
 *      a parent contract to be executed as they are `internal` functions
 */
contract ERC1155MintBurn is ERC1155 {


  /****************************************|
  |            Minting Functions           |
  |_______________________________________*/

  /**
   * @notice Mint _amount of tokens of a given id
   * @param _to      The address to mint tokens to
   * @param _id      Token id to mint
   * @param _amount  The amount to be minted
   * @param _data    Data to pass if receiver is contract
   */
  function _mint(address _to, uint256 _id, uint256 _amount, bytes memory _data)
    internal
  {
    // Add _amount
    balances[_to][_id] = balances[_to][_id].add(_amount);

    // Emit event
    emit TransferSingle(msg.sender, address(0x0), _to, _id, _amount);

    // Calling onReceive method if recipient is contract
    _callonERC1155Received(address(0x0), _to, _id, _amount, _data);
  }

  /**
   * @notice Mint tokens for each ids in _ids
   * @param _to       The address to mint tokens to
   * @param _ids      Array of ids to mint
   * @param _amounts  Array of amount of tokens to mint per id
   * @param _data    Data to pass if receiver is contract
   */
  function _batchMint(address _to, uint256[] memory _ids, uint256[] memory _amounts, bytes memory _data)
    internal
  {
    require(_ids.length == _amounts.length, "ERC1155MintBurn#batchMint: INVALID_ARRAYS_LENGTH");

    // Number of mints to execute
    uint256 nMint = _ids.length;

     // Executing all minting
    for (uint256 i = 0; i < nMint; i++) {
      // Update storage balance
      balances[_to][_ids[i]] = balances[_to][_ids[i]].add(_amounts[i]);
    }

    // Emit batch mint event
    emit TransferBatch(msg.sender, address(0x0), _to, _ids, _amounts);

    // Calling onReceive method if recipient is contract
    _callonERC1155BatchReceived(address(0x0), _to, _ids, _amounts, _data);
  }


  /****************************************|
  |            Burning Functions           |
  |_______________________________________*/

  /**
   * @notice Burn _amount of tokens of a given token id
   * @param _from    The address to burn tokens from
   * @param _id      Token id to burn
   * @param _amount  The amount to be burned
   */
  function _burn(address _from, uint256 _id, uint256 _amount)
    internal
  {
    //Substract _amount
    balances[_from][_id] = balances[_from][_id].sub(_amount);

    // Emit event
    emit TransferSingle(msg.sender, _from, address(0x0), _id, _amount);
  }

  /**
   * @notice Burn tokens of given token id for each (_ids[i], _amounts[i]) pair
   * @param _from     The address to burn tokens from
   * @param _ids      Array of token ids to burn
   * @param _amounts  Array of the amount to be burned
   */
  function _batchBurn(address _from, uint256[] memory _ids, uint256[] memory _amounts)
    internal
  {
    require(_ids.length == _amounts.length, "ERC1155MintBurn#batchBurn: INVALID_ARRAYS_LENGTH");

    // Number of mints to execute
    uint256 nBurn = _ids.length;

     // Executing all minting
    for (uint256 i = 0; i < nBurn; i++) {
      // Update storage balance
      balances[_from][_ids[i]] = balances[_from][_ids[i]].sub(_amounts[i]);
    }

    // Emit batch mint event
    emit TransferBatch(msg.sender, _from, address(0x0), _ids, _amounts);
  }

}

// File: contracts/utils/Strings.sol

//SPDX-License-Identifier: MIT

pragma solidity ^0.5.12;

library Strings {
    // via https://github.com/oraclize/ethereum-api/blob/master/oraclizeAPI_0.5.sol
    function strConcat(
        string memory _a,
        string memory _b,
        string memory _c,
        string memory _d,
        string memory _e
    ) internal pure returns (string memory) {
        bytes memory _ba = bytes(_a);
        bytes memory _bb = bytes(_b);
        bytes memory _bc = bytes(_c);
        bytes memory _bd = bytes(_d);
        bytes memory _be = bytes(_e);
        string memory abcde = new string(
            _ba.length + _bb.length + _bc.length + _bd.length + _be.length
        );
        bytes memory babcde = bytes(abcde);
        uint256 k = 0;
        for (uint256 i = 0; i < _ba.length; i++) babcde[k++] = _ba[i];
        for (uint256 i = 0; i < _bb.length; i++) babcde[k++] = _bb[i];
        for (uint256 i = 0; i < _bc.length; i++) babcde[k++] = _bc[i];
        for (uint256 i = 0; i < _bd.length; i++) babcde[k++] = _bd[i];
        for (uint256 i = 0; i < _be.length; i++) babcde[k++] = _be[i];
        return string(babcde);
    }

    function strConcat(
        string memory _a,
        string memory _b,
        string memory _c,
        string memory _d
    ) internal pure returns (string memory) {
        return strConcat(_a, _b, _c, _d, "");
    }

    function strConcat(
        string memory _a,
        string memory _b,
        string memory _c
    ) internal pure returns (string memory) {
        return strConcat(_a, _b, _c, "", "");
    }

    function strConcat(string memory _a, string memory _b) internal pure returns (string memory) {
        return strConcat(_a, _b, "", "", "");
    }

    function uint2str(uint256 _i) internal pure returns (string memory _uintAsString) {
        if (_i == 0) {
            return "0";
        }
        uint256 j = _i;
        uint256 len;
        while (j != 0) {
            len++;
            j /= 10;
        }
        bytes memory bstr = new bytes(len);
        uint256 k = len - 1;
        while (_i != 0) {
            bstr[k--] = bytes1(uint8(48 + (_i % 10)));
            _i /= 10;
        }
        return string(bstr);
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol

pragma solidity ^0.5.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP. Does not include
 * the optional functions; to access them see {ERC20Detailed}.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

// File: contracts/utils/PermissionGroups.sol

//SPDX-License-Identifier: MIT

pragma solidity ^0.5.12;

contract PermissionGroups {
    address public admin;
    address public pendingAdmin;
    mapping(address => bool) internal operators;
    address[] internal operatorsGroup;
    uint256 internal constant MAX_GROUP_SIZE = 50;

    constructor(address _admin) public {
        require(_admin != address(0), "Admin 0");
        admin = _admin;
    }

    modifier onlyAdmin() {
        require(msg.sender == admin, "Only admin");
        _;
    }

    modifier onlyOperator() {
        require(operators[msg.sender], "Only operator");
        _;
    }

    function getOperators() external view returns (address[] memory) {
        return operatorsGroup;
    }

    event TransferAdminPending(address pendingAdmin);

    /**
     * @dev Allows the current admin to set the pendingAdmin address.
     * @param newAdmin The address to transfer ownership to.
     */
    function transferAdmin(address newAdmin) public onlyAdmin {
        require(newAdmin != address(0), "New admin 0");
        emit TransferAdminPending(newAdmin);
        pendingAdmin = newAdmin;
    }

    /**
     * @dev Allows the current admin to set the admin in one tx. Useful initial deployment.
     * @param newAdmin The address to transfer ownership to.
     */
    function transferAdminQuickly(address newAdmin) public onlyAdmin {
        require(newAdmin != address(0), "Admin 0");
        emit TransferAdminPending(newAdmin);
        emit AdminClaimed(newAdmin, admin);
        admin = newAdmin;
    }

    event AdminClaimed(address newAdmin, address previousAdmin);

    /**
     * @dev Allows the pendingAdmin address to finalize the change admin process.
     */
    function claimAdmin() public {
        require(pendingAdmin == msg.sender, "not pending");
        emit AdminClaimed(pendingAdmin, admin);
        admin = pendingAdmin;
        pendingAdmin = address(0);
    }

    event OperatorAdded(address newOperator, bool isAdd);

    function addOperator(address newOperator) public onlyAdmin {
        require(!operators[newOperator], "Operator exists"); // prevent duplicates.
        require(operatorsGroup.length < MAX_GROUP_SIZE, "Max operators");

        emit OperatorAdded(newOperator, true);
        operators[newOperator] = true;
        operatorsGroup.push(newOperator);
    }

    function removeOperator(address operator) public onlyAdmin {
        require(operators[operator], "Not operator");
        operators[operator] = false;

        for (uint256 i = 0; i < operatorsGroup.length; ++i) {
            if (operatorsGroup[i] == operator) {
                operatorsGroup[i] = operatorsGroup[operatorsGroup.length - 1];
                operatorsGroup.pop();
                emit OperatorAdded(operator, false);
                break;
            }
        }
    }
}

// File: contracts/utils/Withdrawable.sol

//SPDX-License-Identifier: MIT

pragma solidity ^0.5.12;



contract Withdrawable is PermissionGroups {
    bytes4 private constant SELECTOR = bytes4(keccak256(bytes("transfer(address,uint256)")));

    mapping(address => bool) internal blacklist;

    event TokenWithdraw(address token, uint256 amount, address sendTo);

    event EtherWithdraw(uint256 amount, address sendTo);

    constructor(address _admin) public PermissionGroups(_admin) {}

    /**
     * @dev Withdraw all IERC20 compatible tokens
     * @param token IERC20 The address of the token contract
     */
    function withdrawToken(
        address token,
        uint256 amount,
        address sendTo
    ) external onlyAdmin {
        require(!blacklist[address(token)], "forbid to withdraw that token");
        _safeTransfer(token, sendTo, amount);
        emit TokenWithdraw(token, amount, sendTo);
    }

    /**
     * @dev Withdraw Ethers
     */
    function withdrawEther(uint256 amount, address payable sendTo) external onlyAdmin {
        (bool success, ) = sendTo.call.value(amount)("");
        require(success);
        emit EtherWithdraw(amount, sendTo);
    }

    function setBlackList(address token) internal {
        blacklist[token] = true;
    }

    function _safeTransfer(
        address token,
        address to,
        uint256 value
    ) private {
        (bool success, bytes memory data) = token.call(
            abi.encodeWithSelector(SELECTOR, to, value)
        );
        require(success && (data.length == 0 || abi.decode(data, (bool))), "TRANSFER_FAILED");
    }
}

// File: contracts/Goddess.sol

//SPDX-License-Identifier: MIT

pragma solidity ^0.5.12;






contract OwnableDelegateProxy {}

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

contract Goddess is ERC1155, ERC1155MintBurn, ERC1155Metadata, Withdrawable {
    using Strings for string;

    address proxyRegistryAddress;
    uint256 private _currentTokenID = 0;
    mapping(uint256 => uint256) private tokenSupply;
    mapping(uint256 => uint256) private tokenMaxSupply;
    mapping(uint256 => uint256) public nextLevel;
    // Contract name
    string public name;
    // Contract symbol
    string public symbol;

    modifier ownersOnly(uint256 _id) {
        require(balances[msg.sender][_id] > 0, "ERC1155Tradable#ownersOnly: ONLY_OWNERS_ALLOWED");
        _;
    }

    constructor(
        string memory _name,
        string memory _symbol,
        address _proxyRegistryAddress
    ) public Withdrawable(msg.sender) {
        name = _name;
        symbol = _symbol;
        proxyRegistryAddress = _proxyRegistryAddress;
    }

    function uri(uint256 _id) public view returns (string memory) {
        require(_exists(_id), "ERC721Tradable#uri: NONEXISTENT_TOKEN");
        return Strings.strConcat(baseMetadataURI, Strings.uint2str(_id));
    }

    function totalSupply(uint256 _id) public view returns (uint256) {
        return tokenSupply[_id];
    }

    function setBaseMetadataURI(string memory _newBaseMetadataURI) public onlyAdmin {
        _setBaseMetadataURI(_newBaseMetadataURI);
    }

    function setProxyRegistryAddress(address _proxyRegistryAddress) external onlyAdmin {
        proxyRegistryAddress = _proxyRegistryAddress;
    }

    function create(uint256 _maxSupply) external onlyOperator returns (uint256) {
        uint256 _id = _getNextTokenID();
        _incrementTokenTypeId();
        tokenMaxSupply[_id] = _maxSupply;
        return _id;
    }

    function mint(
        address _to,
        uint256 _id,
        uint256 _quantity,
        bytes memory _data
    ) public onlyOperator {
        require(tokenSupply[_id] < tokenMaxSupply[_id], "Max supply reached");
        _mint(_to, _id, _quantity, _data);
        tokenSupply[_id] = tokenSupply[_id].add(_quantity);
    }

    function batchMint(
        address _to,
        uint256[] memory _ids,
        uint256[] memory _quantities,
        bytes memory _data
    ) public onlyOperator {
        for (uint256 i = 0; i < _ids.length; i++) {
            uint256 _id = _ids[i];
            uint256 quantity = _quantities[i];
            tokenSupply[_id] = tokenSupply[_id].add(quantity);
        }
        _batchMint(_to, _ids, _quantities, _data);
    }

    function burn(
        address _from,
        uint256 _id,
        uint256 _amount
    ) public onlyOperator {
        _burn(_from, _id, _amount);
        tokenMaxSupply[_id] = tokenMaxSupply[_id].sub(_amount);
        tokenSupply[_id] = tokenSupply[_id].sub(_amount);
    }

    function isApprovedForAll(address _owner, address _operator)
        public
        view
        returns (bool isOperator)
    {
        // Whitelist OpenSea proxy contract for easy trading.
        ProxyRegistry proxyRegistry = ProxyRegistry(proxyRegistryAddress);
        if (address(proxyRegistry.proxies(_owner)) == _operator) {
            return true;
        }

        return ERC1155.isApprovedForAll(_owner, _operator);
    }

    function _exists(uint256 _id) internal view returns (bool) {
        return _id <= _currentTokenID;
    }

    function _getNextTokenID() private view returns (uint256) {
        return _currentTokenID.add(1);
    }

    /**
     * @dev increments the value of _currentTokenID
     */
    function _incrementTokenTypeId() private {
        _currentTokenID++;
    }

    function maxSupply(uint256 _id) public view returns (uint256) {
        return tokenMaxSupply[_id];
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"address","name":"_proxyRegistryAddress","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"}],"name":"AdminClaimed","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":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"sendTo","type":"address"}],"name":"EtherWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newOperator","type":"address"},{"indexed":false,"internalType":"bool","name":"isAdd","type":"bool"}],"name":"OperatorAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"sendTo","type":"address"}],"name":"TokenWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pendingAdmin","type":"address"}],"name":"TransferAdminPending","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"_uri","type":"string"},{"indexed":true,"internalType":"uint256","name":"_id","type":"uint256"}],"name":"URI","type":"event"},{"constant":false,"inputs":[{"internalType":"address","name":"newOperator","type":"address"}],"name":"addOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address[]","name":"_owners","type":"address[]"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_quantities","type":"uint256[]"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"batchMint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claimAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_maxSupply","type":"uint256"}],"name":"create","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getOperators","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"isOperator","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_quantity","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"mint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"nextLevel","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pendingAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"removeOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"_newBaseMetadataURI","type":"string"}],"name":"setBaseMetadataURI","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_proxyRegistryAddress","type":"address"}],"name":"setProxyRegistryAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes4","name":"_interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"transferAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"transferAdminQuickly","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"sendTo","type":"address"}],"name":"withdrawEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"sendTo","type":"address"}],"name":"withdrawToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

608060405260006009553480156200001657600080fd5b506040516200397038038062003970833981810160405260608110156200003c57600080fd5b81019080805160405193929190846401000000008211156200005d57600080fd5b9083019060208201858111156200007357600080fd5b82516401000000008111828201881017156200008e57600080fd5b82525081516020918201929091019080838360005b83811015620000bd578181015183820152602001620000a3565b50505050905090810190601f168015620000eb5780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200010f57600080fd5b9083019060208201858111156200012557600080fd5b82516401000000008111828201881017156200014057600080fd5b82525081516020918201929091019080838360005b838110156200016f57818101518382015260200162000155565b50505050905090810190601f1680156200019d5780820380516001836020036101000a031916815260200191505b506040526020015191503390508080620001e8576040805162461bcd60e51b8152602060048201526007602482015266041646d696e20360cc1b604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b03929092169190911790555082516200021e90600d9060208601906200025e565b5081516200023490600e9060208501906200025e565b50600880546001600160a01b0319166001600160a01b039290921691909117905550620003039050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620002a157805160ff1916838001178555620002d1565b82800160010185558215620002d1579182015b82811115620002d1578251825591602001919060010190620002b4565b50620002df929150620002e3565b5090565b6200030091905b80821115620002df5760008155600101620002ea565b90565b61365d80620003136000396000f3fe608060405234801561001057600080fd5b50600436106101ce5760003560e01c80637acc867811610104578063b48ab8b6116100a2578063e985e9c511610071578063e985e9c514610b62578063f242432a14610b90578063f5298aca14610c5b578063f851a44014610c8d576101ce565b8063b48ab8b614610935578063bd85b03914610af3578063ce56c45414610b10578063d26ea6c014610b3c576101ce565b806395d89b41116100de57806395d89b41146108b35780639870d7fe146108bb578063a22cb465146108e1578063ac8a584a1461090f576101ce565b80637acc8678146107ca5780637e518ec8146107f0578063869f759414610896576101ce565b80633ccdbb2811610171578063731133e91161014b578063731133e9146106bd57806375829def1461077f57806377f50f97146107a5578063780900dc146107ad576101ce565b80633ccdbb281461054357806341fffe66146105795780634e1273f414610596576101ce565b80630e89341c116101ad5780630e89341c146102e157806326782247146102fe57806327a099d8146103225780632eb2c2d61461037a576101ce565b8062fdd58e146101d357806301ffc9a71461021157806306fdde0314610264575b600080fd5b6101ff600480360360408110156101e957600080fd5b506001600160a01b038135169060200135610c95565b60408051918252519081900360200190f35b6102506004803603602081101561022757600080fd5b50357fffffffff0000000000000000000000000000000000000000000000000000000016610cbe565b604080519115158252519081900360200190f35b61026c610d67565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102a657818101518382015260200161028e565b50505050905090810190601f1680156102d35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61026c600480360360208110156102f757600080fd5b5035610df5565b610306610ed8565b604080516001600160a01b039092168252519081900360200190f35b61032a610ee7565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561036657818101518382015260200161034e565b505050509050019250505060405180910390f35b610541600480360360a081101561039057600080fd5b6001600160a01b0382358116926020810135909116918101906060810160408201356401000000008111156103c457600080fd5b8201836020820111156103d657600080fd5b803590602001918460208302840111640100000000831117156103f857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561044857600080fd5b82018360208201111561045a57600080fd5b8035906020019184602083028401116401000000008311171561047c57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156104cc57600080fd5b8201836020820111156104de57600080fd5b8035906020019184600183028401116401000000008311171561050057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610f4a945050505050565b005b6105416004803603606081101561055957600080fd5b506001600160a01b03813581169160208101359160409091013516611006565b6101ff6004803603602081101561058f57600080fd5b503561112d565b61032a600480360360408110156105ac57600080fd5b8101906020810181356401000000008111156105c757600080fd5b8201836020820111156105d957600080fd5b803590602001918460208302840111640100000000831117156105fb57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561064b57600080fd5b82018360208201111561065d57600080fd5b8035906020019184602083028401116401000000008311171561067f57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061113f945050505050565b610541600480360360808110156106d357600080fd5b6001600160a01b03823516916020810135916040820135919081019060808101606082013564010000000081111561070a57600080fd5b82018360208201111561071c57600080fd5b8035906020019184600183028401116401000000008311171561073e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611240945050505050565b6105416004803603602081101561079557600080fd5b50356001600160a01b0316611354565b610541611484565b6101ff600480360360208110156107c357600080fd5b503561156e565b610541600480360360208110156107e057600080fd5b50356001600160a01b03166115fc565b6105416004803603602081101561080657600080fd5b81019060208101813564010000000081111561082157600080fd5b82018360208201111561083357600080fd5b8035906020019184600183028401116401000000008311171561085557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611774945050505050565b6101ff600480360360208110156108ac57600080fd5b50356117df565b61026c6117f1565b610541600480360360208110156108d157600080fd5b50356001600160a01b031661184c565b610541600480360360408110156108f757600080fd5b506001600160a01b0381351690602001351515611a50565b6105416004803603602081101561092557600080fd5b50356001600160a01b0316611adc565b6105416004803603608081101561094b57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561097657600080fd5b82018360208201111561098857600080fd5b803590602001918460208302840111640100000000831117156109aa57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156109fa57600080fd5b820183602082011115610a0c57600080fd5b80359060200191846020830284011164010000000083111715610a2e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050640100000000811115610a7e57600080fd5b820183602082011115610a9057600080fd5b80359060200191846001830284011164010000000083111715610ab257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611d27945050505050565b6101ff60048036036020811015610b0957600080fd5b5035611e1c565b61054160048036036040811015610b2657600080fd5b50803590602001356001600160a01b0316611e2e565b61054160048036036020811015610b5257600080fd5b50356001600160a01b0316611f33565b61025060048036036040811015610b7857600080fd5b506001600160a01b0381358116916020013516611fcc565b610541600480360360a0811015610ba657600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135640100000000811115610be657600080fd5b820183602082011115610bf857600080fd5b80359060200191846001830284011164010000000083111715610c1a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612090945050505050565b61054160048036036060811015610c7157600080fd5b506001600160a01b038135169060208101359060400135612145565b610306612215565b6001600160a01b0382166000908152602081815260408083208484529091529020545b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a7000000000000000000000000000000000000000000000000000000001480610d5157507fffffffff0000000000000000000000000000000000000000000000000000000082167fd9b67a2600000000000000000000000000000000000000000000000000000000145b15610d5e57506001610d62565b5060005b919050565b600d805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610ded5780601f10610dc257610100808354040283529160200191610ded565b820191906000526020600020905b815481529060010190602001808311610dd057829003601f168201915b505050505081565b6060610e0082612224565b610e3b5760405162461bcd60e51b81526004018080602001828103825260258152602001806135006025913960400191505060405180910390fd5b60028054604080516020601f60001961010060018716150201909416859004938401819004810282018101909252828152610cb89390929091830182828015610ec55780601f10610e9a57610100808354040283529160200191610ec5565b820191906000526020600020905b815481529060010190602001808311610ea857829003601f168201915b5050505050610ed38461222c565b612321565b6004546001600160a01b031681565b60606006805480602002602001604051908101604052809291908181526020018280548015610f3f57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f21575b505050505090505b90565b336001600160a01b0386161480610f665750610f668533611fcc565b610fa15760405162461bcd60e51b815260040180806020018281038252602f815260200180613551602f913960400191505060405180910390fd5b6001600160a01b038416610fe65760405162461bcd60e51b81526004018080602001828103825260308152602001806134d06030913960400191505060405180910390fd5b610ff285858585612364565b610fff858585858561260f565b5050505050565b6003546001600160a01b03163314611065576040805162461bcd60e51b815260206004820152600a60248201527f4f6e6c792061646d696e00000000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b03831660009081526007602052604090205460ff16156110d3576040805162461bcd60e51b815260206004820152601d60248201527f666f7262696420746f207769746864726177207468617420746f6b656e000000604482015290519081900360640190fd5b6110de838284612846565b604080516001600160a01b0380861682526020820185905283168183015290517f72cb8a894ddb372ceec3d2a7648d86f17d5a15caae0e986c53109b8a9a9385e69181900360600190a1505050565b600c6020526000908152604090205481565b606081518351146111815760405162461bcd60e51b815260040180806020018281038252602c815260200180613525602c913960400191505060405180910390fd5b606083516040519080825280602002602001820160405280156111ae578160200160208202803883390190505b50905060005b8451811015611238576000808683815181106111cc57fe5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600085838151811061120257fe5b602002602001015181526020019081526020016000205482828151811061122557fe5b60209081029190910101526001016111b4565b509392505050565b3360009081526005602052604090205460ff166112a4576040805162461bcd60e51b815260206004820152600d60248201527f4f6e6c79206f70657261746f7200000000000000000000000000000000000000604482015290519081900360640190fd5b6000838152600b6020908152604080832054600a9092529091205410611311576040805162461bcd60e51b815260206004820152601260248201527f4d617820737570706c7920726561636865640000000000000000000000000000604482015290519081900360640190fd5b61131d84848484612a25565b6000838152600a602052604090205461133c908363ffffffff612ac516565b6000938452600a602052604090932092909255505050565b6003546001600160a01b031633146113b3576040805162461bcd60e51b815260206004820152600a60248201527f4f6e6c792061646d696e00000000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b03811661140e576040805162461bcd60e51b815260206004820152600b60248201527f4e65772061646d696e2030000000000000000000000000000000000000000000604482015290519081900360640190fd5b604080516001600160a01b038316815290517f3b81caf78fa51ecbc8acb482fd7012a277b428d9b80f9d156e8a54107496cc409181900360200190a1600480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6004546001600160a01b031633146114e3576040805162461bcd60e51b815260206004820152600b60248201527f6e6f742070656e64696e67000000000000000000000000000000000000000000604482015290519081900360640190fd5b600454600354604080516001600160a01b03938416815292909116602083015280517f65da1cfc2c2e81576ad96afb24a581f8e109b7a403b35cbd3243a1c99efdb9ed9281900390910190a160048054600380547fffffffffffffffffffffffff00000000000000000000000000000000000000009081166001600160a01b03841617909155169055565b3360009081526005602052604081205460ff166115d2576040805162461bcd60e51b815260206004820152600d60248201527f4f6e6c79206f70657261746f7200000000000000000000000000000000000000604482015290519081900360640190fd5b60006115dc612b1f565b90506115e6612b3b565b6000818152600b60205260409020929092555090565b6003546001600160a01b0316331461165b576040805162461bcd60e51b815260206004820152600a60248201527f4f6e6c792061646d696e00000000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b0381166116b6576040805162461bcd60e51b815260206004820152600760248201527f41646d696e203000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b604080516001600160a01b038316815290517f3b81caf78fa51ecbc8acb482fd7012a277b428d9b80f9d156e8a54107496cc409181900360200190a1600354604080516001600160a01b038085168252909216602083015280517f65da1cfc2c2e81576ad96afb24a581f8e109b7a403b35cbd3243a1c99efdb9ed9281900390910190a1600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6003546001600160a01b031633146117d3576040805162461bcd60e51b815260206004820152600a60248201527f4f6e6c792061646d696e00000000000000000000000000000000000000000000604482015290519081900360640190fd5b6117dc81612b46565b50565b6000908152600b602052604090205490565b600e805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610ded5780601f10610dc257610100808354040283529160200191610ded565b6003546001600160a01b031633146118ab576040805162461bcd60e51b815260206004820152600a60248201527f4f6e6c792061646d696e00000000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b03811660009081526005602052604090205460ff1615611919576040805162461bcd60e51b815260206004820152600f60248201527f4f70657261746f72206578697374730000000000000000000000000000000000604482015290519081900360640190fd5b600654603211611970576040805162461bcd60e51b815260206004820152600d60248201527f4d6178206f70657261746f727300000000000000000000000000000000000000604482015290519081900360640190fd5b604080516001600160a01b03831681526001602082015281517f091a7a4b85135fdd7e8dbc18b12fabe5cc191ea867aa3c2e1a24a102af61d58b929181900390910190a16001600160a01b0316600081815260056020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055565b3360008181526001602090815260408083206001600160a01b0387168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b6003546001600160a01b03163314611b3b576040805162461bcd60e51b815260206004820152600a60248201527f4f6e6c792061646d696e00000000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b03811660009081526005602052604090205460ff16611ba8576040805162461bcd60e51b815260206004820152600c60248201527f4e6f74206f70657261746f720000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b038116600090815260056020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b600654811015611d2357816001600160a01b031660068281548110611c0857fe5b6000918252602090912001546001600160a01b03161415611d1b57600680546000198101908110611c3557fe5b600091825260209091200154600680546001600160a01b039092169183908110611c5b57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506006805480611c9457fe5b60008281526020808220830160001990810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055909201909255604080516001600160a01b03861681529182019290925281517f091a7a4b85135fdd7e8dbc18b12fabe5cc191ea867aa3c2e1a24a102af61d58b929181900390910190a1611d23565b600101611be7565b5050565b3360009081526005602052604090205460ff16611d8b576040805162461bcd60e51b815260206004820152600d60248201527f4f6e6c79206f70657261746f7200000000000000000000000000000000000000604482015290519081900360640190fd5b60005b8351811015611e09576000848281518110611da557fe5b602002602001015190506000848381518110611dbd57fe5b60200260200101519050611ded81600a600085815260200190815260200160002054612ac590919063ffffffff16565b6000928352600a60205260409092209190915550600101611d8e565b50611e1684848484612b59565b50505050565b6000908152600a602052604090205490565b6003546001600160a01b03163314611e8d576040805162461bcd60e51b815260206004820152600a60248201527f4f6e6c792061646d696e00000000000000000000000000000000000000000000604482015290519081900360640190fd5b6040516000906001600160a01b0383169084908381818185875af1925050503d8060008114611ed8576040519150601f19603f3d011682016040523d82523d6000602084013e611edd565b606091505b5050905080611eeb57600080fd5b604080518481526001600160a01b038416602082015281517fec47e7ed86c86774d1a72c19f35c639911393fe7c1a34031fdbd260890da90de929181900390910190a1505050565b6003546001600160a01b03163314611f92576040805162461bcd60e51b815260206004820152600a60248201527f4f6e6c792061646d696e00000000000000000000000000000000000000000000604482015290519081900360640190fd5b600880547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b600854604080517fc45527910000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301529151600093831692851691839163c455279191602480820192602092909190829003018186803b15801561203957600080fd5b505afa15801561204d573d6000803e3d6000fd5b505050506040513d602081101561206357600080fd5b50516001600160a01b0316141561207e576001915050610cb8565b6120888484612d2d565b949350505050565b336001600160a01b03861614806120ac57506120ac8533611fcc565b6120e75760405162461bcd60e51b815260040180806020018281038252602a815260200180613471602a913960400191505060405180910390fd5b6001600160a01b03841661212c5760405162461bcd60e51b815260040180806020018281038252602b815260200180613446602b913960400191505060405180910390fd5b61213885858585612d5b565b610fff8585858585612e43565b3360009081526005602052604090205460ff166121a9576040805162461bcd60e51b815260206004820152600d60248201527f4f6e6c79206f70657261746f7200000000000000000000000000000000000000604482015290519081900360640190fd5b6121b4838383612ff6565b6000828152600b60205260409020546121d3908263ffffffff61308d16565b6000838152600b6020908152604080832093909355600a905220546121fe908263ffffffff61308d16565b6000928352600a6020526040909220919091555050565b6003546001600160a01b031681565b600954101590565b60608161226d575060408051808201909152600181527f30000000000000000000000000000000000000000000000000000000000000006020820152610d62565b8160005b811561228557600101600a82049150612271565b6060816040519080825280601f01601f1916602001820160405280156122b2576020820181803883390190505b50905060001982015b851561231857600a860660300160f81b828280600190039350815181106122de57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a860495506122bb565b50949350505050565b606061235d83836040518060200160405280600081525060405180602001604052806000815250604051806020016040528060008152506130ea565b9392505050565b80518251146123a45760405162461bcd60e51b815260040180806020018281038252603581526020018061349b6035913960400191505060405180910390fd5b815160005b8181101561252e5761241f8382815181106123c057fe5b6020026020010151600080896001600160a01b03166001600160a01b0316815260200190815260200160002060008785815181106123fa57fe5b602002602001015181526020019081526020016000205461308d90919063ffffffff16565b600080886001600160a01b03166001600160a01b03168152602001908152602001600020600086848151811061245157fe5b60200260200101518152602001908152602001600020819055506124d983828151811061247a57fe5b6020026020010151600080886001600160a01b03166001600160a01b0316815260200190815260200160002060008785815181106124b457fe5b6020026020010151815260200190815260200160002054612ac590919063ffffffff16565b600080876001600160a01b03166001600160a01b03168152602001908152602001600020600086848151811061250b57fe5b6020908102919091018101518252810191909152604001600020556001016123a9565b50836001600160a01b0316856001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156125b457818101518382015260200161259c565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156125f35781810151838201526020016125db565b5050505090500194505050505060405180910390a45050505050565b612621846001600160a01b0316613376565b15610fff576000846001600160a01b031663bc197c8133888787876040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b838110156126c35781810151838201526020016126ab565b50505050905001848103835286818151815260200191508051906020019060200280838360005b838110156127025781810151838201526020016126ea565b50505050905001848103825285818151815260200191508051906020019080838360005b8381101561273e578181015183820152602001612726565b50505050905090810190601f16801561276b5780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b15801561279057600080fd5b505af11580156127a4573d6000803e3d6000fd5b505050506040513d60208110156127ba57600080fd5b505190507fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c81000000000000000000000000000000000000000000000000000000001461283e5760405162461bcd60e51b815260040180806020018281038252603f8152602001806135b0603f913960400191505060405180910390fd5b505050505050565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251815160009460609489169392918291908083835b6020831061293f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612902565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146129a1576040519150601f19603f3d011682016040523d82523d6000602084013e6129a6565b606091505b50915091508180156129d45750805115806129d457508080602001905160208110156129d157600080fd5b50515b610fff576040805162461bcd60e51b815260206004820152600f60248201527f5452414e534645525f4641494c45440000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b038416600090815260208181526040808320868452909152902054612a57908363ffffffff612ac516565b6001600160a01b038516600081815260208181526040808320888452825280832094909455835187815290810186905283519293919233927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62928290030190a4611e16600085858585612e43565b60008282018381101561235d576040805162461bcd60e51b815260206004820152601660248201527f536166654d617468236164643a204f564552464c4f5700000000000000000000604482015290519081900360640190fd5b600954600090612b3690600163ffffffff612ac516565b905090565b600980546001019055565b8051611d239060029060208401906133ad565b8151835114612b995760405162461bcd60e51b81526004018080602001828103825260308152602001806135806030913960400191505060405180910390fd5b825160005b81811015612c4457612bef848281518110612bb557fe5b6020026020010151600080896001600160a01b03166001600160a01b0316815260200190815260200160002060008885815181106124b457fe5b600080886001600160a01b03166001600160a01b031681526020019081526020016000206000878481518110612c2157fe5b602090810291909101810151825281019190915260400160002055600101612b9e565b50846001600160a01b031660006001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015612ccb578181015183820152602001612cb3565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015612d0a578181015183820152602001612cf2565b5050505090500194505050505060405180910390a4610fff60008686868661260f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6001600160a01b038416600090815260208181526040808320858452909152902054612d8d908263ffffffff61308d16565b6001600160a01b0380861660009081526020818152604080832087845282528083209490945591861681528082528281208582529091522054612dd6908263ffffffff612ac516565b6001600160a01b03808516600081815260208181526040808320888452825291829020949094558051868152938401859052805191939288169233927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62929181900390910190a450505050565b612e55846001600160a01b0316613376565b15610fff576000846001600160a01b031663f23a6e6133888787876040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612ef8578181015183820152602001612ee0565b50505050905090810190601f168015612f255780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b158015612f4857600080fd5b505af1158015612f5c573d6000803e3d6000fd5b505050506040513d6020811015612f7257600080fd5b505190507fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e61000000000000000000000000000000000000000000000000000000001461283e5760405162461bcd60e51b815260040180806020018281038252603a8152602001806135ef603a913960400191505060405180910390fd5b6001600160a01b038316600090815260208181526040808320858452909152902054613028908263ffffffff61308d16565b6001600160a01b03841660008181526020818152604080832087845282528083209490945583518681529081018590528351919333927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f629281900390910190a4505050565b6000828211156130e4576040805162461bcd60e51b815260206004820152601760248201527f536166654d617468237375623a20554e444552464c4f57000000000000000000604482015290519081900360640190fd5b50900390565b6060808690506060869050606086905060608690506060869050606081518351855187518951010101016040519080825280601f01601f19166020018201604052801561313e576020820181803883390190505b509050806000805b88518110156131af5788818151811061315b57fe5b602001015160f81c60f81b83838060010194508151811061317857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600101613146565b5060005b875181101561321c578781815181106131c857fe5b602001015160f81c60f81b8383806001019450815181106131e557fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506001016131b3565b5060005b86518110156132895786818151811061323557fe5b602001015160f81c60f81b83838060010194508151811061325257fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600101613220565b5060005b85518110156132f6578581815181106132a257fe5b602001015160f81c60f81b8383806001019450815181106132bf57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060010161328d565b5060005b84518110156133635784818151811061330f57fe5b602001015160f81c60f81b83838060010194508151811061332c57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506001016132fa565b50909d9c50505050505050505050505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906120885750141592915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106133ee57805160ff191683800117855561341b565b8280016001018555821561341b579182015b8281111561341b578251825591602001919060010190613400565b5061342792915061342b565b5090565b610f4791905b80821115613427576000815560010161343156fe4552433131353523736166655472616e7366657246726f6d3a20494e56414c49445f524543495049454e544552433131353523736166655472616e7366657246726f6d3a20494e56414c49445f4f50455241544f5245524331313535235f7361666542617463685472616e7366657246726f6d3a20494e56414c49445f4152524159535f4c454e47544845524331313535237361666542617463685472616e7366657246726f6d3a20494e56414c49445f524543495049454e544552433732315472616461626c65237572693a204e4f4e4558495354454e545f544f4b454e455243313135352362616c616e63654f6642617463683a20494e56414c49445f41525241595f4c454e47544845524331313535237361666542617463685472616e7366657246726f6d3a20494e56414c49445f4f50455241544f52455243313135354d696e744275726e2362617463684d696e743a20494e56414c49445f4152524159535f4c454e47544845524331313535235f63616c6c6f6e45524331313535426174636852656365697665643a20494e56414c49445f4f4e5f524543454956455f4d45535341474545524331313535235f63616c6c6f6e4552433131353552656365697665643a20494e56414c49445f4f4e5f524543454956455f4d455353414745a265627a7a72315820bb18defe7ca16e9ef43c094f64d4fb2bc9c7785e892acac6379ee2022e65c07264736f6c63430005110032000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000008db6a3fe0f238ed9f9e440fbed33d6c25e06d8a50000000000000000000000000000000000000000000000000000000000000007476f6464657373000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007474f444445535300000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101ce5760003560e01c80637acc867811610104578063b48ab8b6116100a2578063e985e9c511610071578063e985e9c514610b62578063f242432a14610b90578063f5298aca14610c5b578063f851a44014610c8d576101ce565b8063b48ab8b614610935578063bd85b03914610af3578063ce56c45414610b10578063d26ea6c014610b3c576101ce565b806395d89b41116100de57806395d89b41146108b35780639870d7fe146108bb578063a22cb465146108e1578063ac8a584a1461090f576101ce565b80637acc8678146107ca5780637e518ec8146107f0578063869f759414610896576101ce565b80633ccdbb2811610171578063731133e91161014b578063731133e9146106bd57806375829def1461077f57806377f50f97146107a5578063780900dc146107ad576101ce565b80633ccdbb281461054357806341fffe66146105795780634e1273f414610596576101ce565b80630e89341c116101ad5780630e89341c146102e157806326782247146102fe57806327a099d8146103225780632eb2c2d61461037a576101ce565b8062fdd58e146101d357806301ffc9a71461021157806306fdde0314610264575b600080fd5b6101ff600480360360408110156101e957600080fd5b506001600160a01b038135169060200135610c95565b60408051918252519081900360200190f35b6102506004803603602081101561022757600080fd5b50357fffffffff0000000000000000000000000000000000000000000000000000000016610cbe565b604080519115158252519081900360200190f35b61026c610d67565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102a657818101518382015260200161028e565b50505050905090810190601f1680156102d35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61026c600480360360208110156102f757600080fd5b5035610df5565b610306610ed8565b604080516001600160a01b039092168252519081900360200190f35b61032a610ee7565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561036657818101518382015260200161034e565b505050509050019250505060405180910390f35b610541600480360360a081101561039057600080fd5b6001600160a01b0382358116926020810135909116918101906060810160408201356401000000008111156103c457600080fd5b8201836020820111156103d657600080fd5b803590602001918460208302840111640100000000831117156103f857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561044857600080fd5b82018360208201111561045a57600080fd5b8035906020019184602083028401116401000000008311171561047c57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156104cc57600080fd5b8201836020820111156104de57600080fd5b8035906020019184600183028401116401000000008311171561050057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610f4a945050505050565b005b6105416004803603606081101561055957600080fd5b506001600160a01b03813581169160208101359160409091013516611006565b6101ff6004803603602081101561058f57600080fd5b503561112d565b61032a600480360360408110156105ac57600080fd5b8101906020810181356401000000008111156105c757600080fd5b8201836020820111156105d957600080fd5b803590602001918460208302840111640100000000831117156105fb57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561064b57600080fd5b82018360208201111561065d57600080fd5b8035906020019184602083028401116401000000008311171561067f57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061113f945050505050565b610541600480360360808110156106d357600080fd5b6001600160a01b03823516916020810135916040820135919081019060808101606082013564010000000081111561070a57600080fd5b82018360208201111561071c57600080fd5b8035906020019184600183028401116401000000008311171561073e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611240945050505050565b6105416004803603602081101561079557600080fd5b50356001600160a01b0316611354565b610541611484565b6101ff600480360360208110156107c357600080fd5b503561156e565b610541600480360360208110156107e057600080fd5b50356001600160a01b03166115fc565b6105416004803603602081101561080657600080fd5b81019060208101813564010000000081111561082157600080fd5b82018360208201111561083357600080fd5b8035906020019184600183028401116401000000008311171561085557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611774945050505050565b6101ff600480360360208110156108ac57600080fd5b50356117df565b61026c6117f1565b610541600480360360208110156108d157600080fd5b50356001600160a01b031661184c565b610541600480360360408110156108f757600080fd5b506001600160a01b0381351690602001351515611a50565b6105416004803603602081101561092557600080fd5b50356001600160a01b0316611adc565b6105416004803603608081101561094b57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561097657600080fd5b82018360208201111561098857600080fd5b803590602001918460208302840111640100000000831117156109aa57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156109fa57600080fd5b820183602082011115610a0c57600080fd5b80359060200191846020830284011164010000000083111715610a2e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050640100000000811115610a7e57600080fd5b820183602082011115610a9057600080fd5b80359060200191846001830284011164010000000083111715610ab257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611d27945050505050565b6101ff60048036036020811015610b0957600080fd5b5035611e1c565b61054160048036036040811015610b2657600080fd5b50803590602001356001600160a01b0316611e2e565b61054160048036036020811015610b5257600080fd5b50356001600160a01b0316611f33565b61025060048036036040811015610b7857600080fd5b506001600160a01b0381358116916020013516611fcc565b610541600480360360a0811015610ba657600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135640100000000811115610be657600080fd5b820183602082011115610bf857600080fd5b80359060200191846001830284011164010000000083111715610c1a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612090945050505050565b61054160048036036060811015610c7157600080fd5b506001600160a01b038135169060208101359060400135612145565b610306612215565b6001600160a01b0382166000908152602081815260408083208484529091529020545b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a7000000000000000000000000000000000000000000000000000000001480610d5157507fffffffff0000000000000000000000000000000000000000000000000000000082167fd9b67a2600000000000000000000000000000000000000000000000000000000145b15610d5e57506001610d62565b5060005b919050565b600d805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610ded5780601f10610dc257610100808354040283529160200191610ded565b820191906000526020600020905b815481529060010190602001808311610dd057829003601f168201915b505050505081565b6060610e0082612224565b610e3b5760405162461bcd60e51b81526004018080602001828103825260258152602001806135006025913960400191505060405180910390fd5b60028054604080516020601f60001961010060018716150201909416859004938401819004810282018101909252828152610cb89390929091830182828015610ec55780601f10610e9a57610100808354040283529160200191610ec5565b820191906000526020600020905b815481529060010190602001808311610ea857829003601f168201915b5050505050610ed38461222c565b612321565b6004546001600160a01b031681565b60606006805480602002602001604051908101604052809291908181526020018280548015610f3f57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f21575b505050505090505b90565b336001600160a01b0386161480610f665750610f668533611fcc565b610fa15760405162461bcd60e51b815260040180806020018281038252602f815260200180613551602f913960400191505060405180910390fd5b6001600160a01b038416610fe65760405162461bcd60e51b81526004018080602001828103825260308152602001806134d06030913960400191505060405180910390fd5b610ff285858585612364565b610fff858585858561260f565b5050505050565b6003546001600160a01b03163314611065576040805162461bcd60e51b815260206004820152600a60248201527f4f6e6c792061646d696e00000000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b03831660009081526007602052604090205460ff16156110d3576040805162461bcd60e51b815260206004820152601d60248201527f666f7262696420746f207769746864726177207468617420746f6b656e000000604482015290519081900360640190fd5b6110de838284612846565b604080516001600160a01b0380861682526020820185905283168183015290517f72cb8a894ddb372ceec3d2a7648d86f17d5a15caae0e986c53109b8a9a9385e69181900360600190a1505050565b600c6020526000908152604090205481565b606081518351146111815760405162461bcd60e51b815260040180806020018281038252602c815260200180613525602c913960400191505060405180910390fd5b606083516040519080825280602002602001820160405280156111ae578160200160208202803883390190505b50905060005b8451811015611238576000808683815181106111cc57fe5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600085838151811061120257fe5b602002602001015181526020019081526020016000205482828151811061122557fe5b60209081029190910101526001016111b4565b509392505050565b3360009081526005602052604090205460ff166112a4576040805162461bcd60e51b815260206004820152600d60248201527f4f6e6c79206f70657261746f7200000000000000000000000000000000000000604482015290519081900360640190fd5b6000838152600b6020908152604080832054600a9092529091205410611311576040805162461bcd60e51b815260206004820152601260248201527f4d617820737570706c7920726561636865640000000000000000000000000000604482015290519081900360640190fd5b61131d84848484612a25565b6000838152600a602052604090205461133c908363ffffffff612ac516565b6000938452600a602052604090932092909255505050565b6003546001600160a01b031633146113b3576040805162461bcd60e51b815260206004820152600a60248201527f4f6e6c792061646d696e00000000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b03811661140e576040805162461bcd60e51b815260206004820152600b60248201527f4e65772061646d696e2030000000000000000000000000000000000000000000604482015290519081900360640190fd5b604080516001600160a01b038316815290517f3b81caf78fa51ecbc8acb482fd7012a277b428d9b80f9d156e8a54107496cc409181900360200190a1600480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6004546001600160a01b031633146114e3576040805162461bcd60e51b815260206004820152600b60248201527f6e6f742070656e64696e67000000000000000000000000000000000000000000604482015290519081900360640190fd5b600454600354604080516001600160a01b03938416815292909116602083015280517f65da1cfc2c2e81576ad96afb24a581f8e109b7a403b35cbd3243a1c99efdb9ed9281900390910190a160048054600380547fffffffffffffffffffffffff00000000000000000000000000000000000000009081166001600160a01b03841617909155169055565b3360009081526005602052604081205460ff166115d2576040805162461bcd60e51b815260206004820152600d60248201527f4f6e6c79206f70657261746f7200000000000000000000000000000000000000604482015290519081900360640190fd5b60006115dc612b1f565b90506115e6612b3b565b6000818152600b60205260409020929092555090565b6003546001600160a01b0316331461165b576040805162461bcd60e51b815260206004820152600a60248201527f4f6e6c792061646d696e00000000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b0381166116b6576040805162461bcd60e51b815260206004820152600760248201527f41646d696e203000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b604080516001600160a01b038316815290517f3b81caf78fa51ecbc8acb482fd7012a277b428d9b80f9d156e8a54107496cc409181900360200190a1600354604080516001600160a01b038085168252909216602083015280517f65da1cfc2c2e81576ad96afb24a581f8e109b7a403b35cbd3243a1c99efdb9ed9281900390910190a1600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6003546001600160a01b031633146117d3576040805162461bcd60e51b815260206004820152600a60248201527f4f6e6c792061646d696e00000000000000000000000000000000000000000000604482015290519081900360640190fd5b6117dc81612b46565b50565b6000908152600b602052604090205490565b600e805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610ded5780601f10610dc257610100808354040283529160200191610ded565b6003546001600160a01b031633146118ab576040805162461bcd60e51b815260206004820152600a60248201527f4f6e6c792061646d696e00000000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b03811660009081526005602052604090205460ff1615611919576040805162461bcd60e51b815260206004820152600f60248201527f4f70657261746f72206578697374730000000000000000000000000000000000604482015290519081900360640190fd5b600654603211611970576040805162461bcd60e51b815260206004820152600d60248201527f4d6178206f70657261746f727300000000000000000000000000000000000000604482015290519081900360640190fd5b604080516001600160a01b03831681526001602082015281517f091a7a4b85135fdd7e8dbc18b12fabe5cc191ea867aa3c2e1a24a102af61d58b929181900390910190a16001600160a01b0316600081815260056020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055565b3360008181526001602090815260408083206001600160a01b0387168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b6003546001600160a01b03163314611b3b576040805162461bcd60e51b815260206004820152600a60248201527f4f6e6c792061646d696e00000000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b03811660009081526005602052604090205460ff16611ba8576040805162461bcd60e51b815260206004820152600c60248201527f4e6f74206f70657261746f720000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b038116600090815260056020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b600654811015611d2357816001600160a01b031660068281548110611c0857fe5b6000918252602090912001546001600160a01b03161415611d1b57600680546000198101908110611c3557fe5b600091825260209091200154600680546001600160a01b039092169183908110611c5b57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506006805480611c9457fe5b60008281526020808220830160001990810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055909201909255604080516001600160a01b03861681529182019290925281517f091a7a4b85135fdd7e8dbc18b12fabe5cc191ea867aa3c2e1a24a102af61d58b929181900390910190a1611d23565b600101611be7565b5050565b3360009081526005602052604090205460ff16611d8b576040805162461bcd60e51b815260206004820152600d60248201527f4f6e6c79206f70657261746f7200000000000000000000000000000000000000604482015290519081900360640190fd5b60005b8351811015611e09576000848281518110611da557fe5b602002602001015190506000848381518110611dbd57fe5b60200260200101519050611ded81600a600085815260200190815260200160002054612ac590919063ffffffff16565b6000928352600a60205260409092209190915550600101611d8e565b50611e1684848484612b59565b50505050565b6000908152600a602052604090205490565b6003546001600160a01b03163314611e8d576040805162461bcd60e51b815260206004820152600a60248201527f4f6e6c792061646d696e00000000000000000000000000000000000000000000604482015290519081900360640190fd5b6040516000906001600160a01b0383169084908381818185875af1925050503d8060008114611ed8576040519150601f19603f3d011682016040523d82523d6000602084013e611edd565b606091505b5050905080611eeb57600080fd5b604080518481526001600160a01b038416602082015281517fec47e7ed86c86774d1a72c19f35c639911393fe7c1a34031fdbd260890da90de929181900390910190a1505050565b6003546001600160a01b03163314611f92576040805162461bcd60e51b815260206004820152600a60248201527f4f6e6c792061646d696e00000000000000000000000000000000000000000000604482015290519081900360640190fd5b600880547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b600854604080517fc45527910000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301529151600093831692851691839163c455279191602480820192602092909190829003018186803b15801561203957600080fd5b505afa15801561204d573d6000803e3d6000fd5b505050506040513d602081101561206357600080fd5b50516001600160a01b0316141561207e576001915050610cb8565b6120888484612d2d565b949350505050565b336001600160a01b03861614806120ac57506120ac8533611fcc565b6120e75760405162461bcd60e51b815260040180806020018281038252602a815260200180613471602a913960400191505060405180910390fd5b6001600160a01b03841661212c5760405162461bcd60e51b815260040180806020018281038252602b815260200180613446602b913960400191505060405180910390fd5b61213885858585612d5b565b610fff8585858585612e43565b3360009081526005602052604090205460ff166121a9576040805162461bcd60e51b815260206004820152600d60248201527f4f6e6c79206f70657261746f7200000000000000000000000000000000000000604482015290519081900360640190fd5b6121b4838383612ff6565b6000828152600b60205260409020546121d3908263ffffffff61308d16565b6000838152600b6020908152604080832093909355600a905220546121fe908263ffffffff61308d16565b6000928352600a6020526040909220919091555050565b6003546001600160a01b031681565b600954101590565b60608161226d575060408051808201909152600181527f30000000000000000000000000000000000000000000000000000000000000006020820152610d62565b8160005b811561228557600101600a82049150612271565b6060816040519080825280601f01601f1916602001820160405280156122b2576020820181803883390190505b50905060001982015b851561231857600a860660300160f81b828280600190039350815181106122de57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a860495506122bb565b50949350505050565b606061235d83836040518060200160405280600081525060405180602001604052806000815250604051806020016040528060008152506130ea565b9392505050565b80518251146123a45760405162461bcd60e51b815260040180806020018281038252603581526020018061349b6035913960400191505060405180910390fd5b815160005b8181101561252e5761241f8382815181106123c057fe5b6020026020010151600080896001600160a01b03166001600160a01b0316815260200190815260200160002060008785815181106123fa57fe5b602002602001015181526020019081526020016000205461308d90919063ffffffff16565b600080886001600160a01b03166001600160a01b03168152602001908152602001600020600086848151811061245157fe5b60200260200101518152602001908152602001600020819055506124d983828151811061247a57fe5b6020026020010151600080886001600160a01b03166001600160a01b0316815260200190815260200160002060008785815181106124b457fe5b6020026020010151815260200190815260200160002054612ac590919063ffffffff16565b600080876001600160a01b03166001600160a01b03168152602001908152602001600020600086848151811061250b57fe5b6020908102919091018101518252810191909152604001600020556001016123a9565b50836001600160a01b0316856001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156125b457818101518382015260200161259c565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156125f35781810151838201526020016125db565b5050505090500194505050505060405180910390a45050505050565b612621846001600160a01b0316613376565b15610fff576000846001600160a01b031663bc197c8133888787876040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b838110156126c35781810151838201526020016126ab565b50505050905001848103835286818151815260200191508051906020019060200280838360005b838110156127025781810151838201526020016126ea565b50505050905001848103825285818151815260200191508051906020019080838360005b8381101561273e578181015183820152602001612726565b50505050905090810190601f16801561276b5780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b15801561279057600080fd5b505af11580156127a4573d6000803e3d6000fd5b505050506040513d60208110156127ba57600080fd5b505190507fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c81000000000000000000000000000000000000000000000000000000001461283e5760405162461bcd60e51b815260040180806020018281038252603f8152602001806135b0603f913960400191505060405180910390fd5b505050505050565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251815160009460609489169392918291908083835b6020831061293f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612902565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146129a1576040519150601f19603f3d011682016040523d82523d6000602084013e6129a6565b606091505b50915091508180156129d45750805115806129d457508080602001905160208110156129d157600080fd5b50515b610fff576040805162461bcd60e51b815260206004820152600f60248201527f5452414e534645525f4641494c45440000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b038416600090815260208181526040808320868452909152902054612a57908363ffffffff612ac516565b6001600160a01b038516600081815260208181526040808320888452825280832094909455835187815290810186905283519293919233927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62928290030190a4611e16600085858585612e43565b60008282018381101561235d576040805162461bcd60e51b815260206004820152601660248201527f536166654d617468236164643a204f564552464c4f5700000000000000000000604482015290519081900360640190fd5b600954600090612b3690600163ffffffff612ac516565b905090565b600980546001019055565b8051611d239060029060208401906133ad565b8151835114612b995760405162461bcd60e51b81526004018080602001828103825260308152602001806135806030913960400191505060405180910390fd5b825160005b81811015612c4457612bef848281518110612bb557fe5b6020026020010151600080896001600160a01b03166001600160a01b0316815260200190815260200160002060008885815181106124b457fe5b600080886001600160a01b03166001600160a01b031681526020019081526020016000206000878481518110612c2157fe5b602090810291909101810151825281019190915260400160002055600101612b9e565b50846001600160a01b031660006001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015612ccb578181015183820152602001612cb3565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015612d0a578181015183820152602001612cf2565b5050505090500194505050505060405180910390a4610fff60008686868661260f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6001600160a01b038416600090815260208181526040808320858452909152902054612d8d908263ffffffff61308d16565b6001600160a01b0380861660009081526020818152604080832087845282528083209490945591861681528082528281208582529091522054612dd6908263ffffffff612ac516565b6001600160a01b03808516600081815260208181526040808320888452825291829020949094558051868152938401859052805191939288169233927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62929181900390910190a450505050565b612e55846001600160a01b0316613376565b15610fff576000846001600160a01b031663f23a6e6133888787876040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612ef8578181015183820152602001612ee0565b50505050905090810190601f168015612f255780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b158015612f4857600080fd5b505af1158015612f5c573d6000803e3d6000fd5b505050506040513d6020811015612f7257600080fd5b505190507fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e61000000000000000000000000000000000000000000000000000000001461283e5760405162461bcd60e51b815260040180806020018281038252603a8152602001806135ef603a913960400191505060405180910390fd5b6001600160a01b038316600090815260208181526040808320858452909152902054613028908263ffffffff61308d16565b6001600160a01b03841660008181526020818152604080832087845282528083209490945583518681529081018590528351919333927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f629281900390910190a4505050565b6000828211156130e4576040805162461bcd60e51b815260206004820152601760248201527f536166654d617468237375623a20554e444552464c4f57000000000000000000604482015290519081900360640190fd5b50900390565b6060808690506060869050606086905060608690506060869050606081518351855187518951010101016040519080825280601f01601f19166020018201604052801561313e576020820181803883390190505b509050806000805b88518110156131af5788818151811061315b57fe5b602001015160f81c60f81b83838060010194508151811061317857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600101613146565b5060005b875181101561321c578781815181106131c857fe5b602001015160f81c60f81b8383806001019450815181106131e557fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506001016131b3565b5060005b86518110156132895786818151811061323557fe5b602001015160f81c60f81b83838060010194508151811061325257fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600101613220565b5060005b85518110156132f6578581815181106132a257fe5b602001015160f81c60f81b8383806001019450815181106132bf57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060010161328d565b5060005b84518110156133635784818151811061330f57fe5b602001015160f81c60f81b83838060010194508151811061332c57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506001016132fa565b50909d9c50505050505050505050505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906120885750141592915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106133ee57805160ff191683800117855561341b565b8280016001018555821561341b579182015b8281111561341b578251825591602001919060010190613400565b5061342792915061342b565b5090565b610f4791905b80821115613427576000815560010161343156fe4552433131353523736166655472616e7366657246726f6d3a20494e56414c49445f524543495049454e544552433131353523736166655472616e7366657246726f6d3a20494e56414c49445f4f50455241544f5245524331313535235f7361666542617463685472616e7366657246726f6d3a20494e56414c49445f4152524159535f4c454e47544845524331313535237361666542617463685472616e7366657246726f6d3a20494e56414c49445f524543495049454e544552433732315472616461626c65237572693a204e4f4e4558495354454e545f544f4b454e455243313135352362616c616e63654f6642617463683a20494e56414c49445f41525241595f4c454e47544845524331313535237361666542617463685472616e7366657246726f6d3a20494e56414c49445f4f50455241544f52455243313135354d696e744275726e2362617463684d696e743a20494e56414c49445f4152524159535f4c454e47544845524331313535235f63616c6c6f6e45524331313535426174636852656365697665643a20494e56414c49445f4f4e5f524543454956455f4d45535341474545524331313535235f63616c6c6f6e4552433131353552656365697665643a20494e56414c49445f4f4e5f524543454956455f4d455353414745a265627a7a72315820bb18defe7ca16e9ef43c094f64d4fb2bc9c7785e892acac6379ee2022e65c07264736f6c63430005110032

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000008db6a3fe0f238ed9f9e440fbed33d6c25e06d8a50000000000000000000000000000000000000000000000000000000000000007476f6464657373000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007474f444445535300000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Goddess
Arg [1] : _symbol (string): GODDESS
Arg [2] : _proxyRegistryAddress (address): 0x8DB6A3FE0f238ed9f9E440fbeD33d6C25E06D8a5

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 0000000000000000000000008db6a3fe0f238ed9f9e440fbed33d6c25e06d8a5
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [4] : 476f646465737300000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [6] : 474f444445535300000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

40207:3793:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40207:3793:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21050:127;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;21050:127:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;23025:240;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23025:240:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;40584:18;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;40584:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41097:218;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;41097:218:0;;:::i;35495:27::-;;;:::i;:::-;;;;-1:-1:-1;;;;;35495:27:0;;;;;;;;;;;;;;36012:105;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;36012:105:0;;;;;;;;;;;;;;;;;16227:511;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;16227:511:0;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;16227:511:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;16227:511:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;16227:511:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;16227:511:0;;;;;;;;-1:-1:-1;16227:511:0;;-1:-1:-1;;21:11;5:28;;2:2;;;46:1;43;36:12;2:2;16227:511:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;16227:511:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;16227:511:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;16227:511:0;;;;;;;;-1:-1:-1;16227:511:0;;-1:-1:-1;;21:11;5:28;;2:2;;;46:1;43;36:12;2:2;16227:511:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;16227:511:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;16227:511:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;16227:511:0;;-1:-1:-1;16227:511:0;;-1:-1:-1;;;;;16227:511:0:i;:::-;;38939:309;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;38939:309:0;;;;;;;;;;;;;;;;;:::i;40511:44::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;40511:44:0;;:::i;21465:500::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21465:500:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;21465:500:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;21465:500:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;21465:500:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;21465:500:0;;;;;;;;-1:-1:-1;21465:500:0;;-1:-1:-1;;21:11;5:28;;2:2;;;46:1;43;36:12;2:2;21465:500:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;21465:500:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;21465:500:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;21465:500:0;;-1:-1:-1;21465:500:0;;-1:-1:-1;;;;;21465:500:0:i;41970:335::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;41970:335:0;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;41970:335:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;41970:335:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;41970:335:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;41970:335:0;;-1:-1:-1;41970:335:0;;-1:-1:-1;;;;;41970:335:0:i;36333:203::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36333:203:0;-1:-1:-1;;;;;36333:203:0;;:::i;37138:214::-;;;:::i;41738:224::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;41738:224:0;;:::i;36717:244::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36717:244:0;-1:-1:-1;;;;;36717:244:0;;:::i;41437:139::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;41437:139:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;41437:139:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;41437:139:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;41437:139:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;41437:139:0;;-1:-1:-1;41437:139:0;;-1:-1:-1;;;;;41437:139:0:i;43890:107::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;43890:107:0;;:::i;40633:20::-;;;:::i;37421:360::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37421:360:0;-1:-1:-1;;;;;37421:360:0;;:::i;20056:227::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;20056:227:0;;;;;;;;;;:::i;37789:498::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37789:498:0;-1:-1:-1;;;;;37789:498:0;;:::i;42313:440::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;42313:440:0;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;42313:440:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;42313:440:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;42313:440:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;42313:440:0;;;;;;;;-1:-1:-1;42313:440:0;;-1:-1:-1;;21:11;5:28;;2:2;;;46:1;43;36:12;2:2;42313:440:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;42313:440:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;42313:440:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;42313:440:0;;;;;;;;-1:-1:-1;42313:440:0;;-1:-1:-1;;21:11;5:28;;2:2;;;46:1;43;36:12;2:2;42313:440:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;42313:440:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;42313:440:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;42313:440:0;;-1:-1:-1;42313:440:0;;-1:-1:-1;;;;;42313:440:0:i;41323:106::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;41323:106:0;;:::i;39303:221::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39303:221:0;;;;;;-1:-1:-1;;;;;39303:221:0;;:::i;41584:146::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;41584:146:0;-1:-1:-1;;;;;41584:146:0;;:::i;43051:446::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;43051:446:0;;;;;;;;;;:::i;15289:545::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;15289:545:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;15289:545:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;15289:545:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;15289:545:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;15289:545:0;;-1:-1:-1;15289:545:0;;-1:-1:-1;;;;;15289:545:0:i;42761:282::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;42761:282:0;;;;;;;;;;;;;:::i;35468:20::-;;;:::i;21050:127::-;-1:-1:-1;;;;;21150:16:0;;21124:7;21150:16;;;;;;;;;;;:21;;;;;;;;;21050:127;;;;;:::o;23025:240::-;23096:4;23113:42;;;23129:26;23113:42;;:98;;-1:-1:-1;23168:43:0;;;23184:27;23168:43;23113:98;23109:132;;;-1:-1:-1;23229:4:0;23222:11;;23109:132;-1:-1:-1;23254:5:0;23025:240;;;;:::o;40584:18::-;;;;;;;;;;;;;;;-1:-1:-1;;40584:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;41097:218::-;41144:13;41178:12;41186:3;41178:7;:12::i;:::-;41170:62;;;;-1:-1:-1;;;41170:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41268:15;41250:57;;;;;;;-1:-1:-1;;41250:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41268:15;;41250:57;;41268:15;41250:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41285:21;41302:3;41285:16;:21::i;:::-;41250:17;:57::i;35495:27::-;;;-1:-1:-1;;;;;35495:27:0;;:::o;36012:105::-;36059:16;36095:14;36088:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36088:21:0;;;;;;;;;;;;;;;;;;;;;;;36012:105;;:::o;16227:511::-;16408:10;-1:-1:-1;;;;;16408:19:0;;;;16407:60;;;16432:35;16449:5;16456:10;16432:16;:35::i;:::-;16399:120;;;;-1:-1:-1;;;16399:120:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16534:17:0;;16526:78;;;;-1:-1:-1;;;16526:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16613:50;16636:5;16643:3;16648:4;16654:8;16613:22;:50::i;:::-;16670:62;16698:5;16705:3;16710:4;16716:8;16726:5;16670:27;:62::i;:::-;16227:511;;;;;:::o;38939:309::-;35854:5;;-1:-1:-1;;;;;35854:5:0;35840:10;:19;35832:42;;;;;-1:-1:-1;;;35832:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39082:25:0;;;;;;:9;:25;;;;;;;;39081:26;39073:68;;;;;-1:-1:-1;;;39073:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;39152:36;39166:5;39173:6;39181;39152:13;:36::i;:::-;39204;;;-1:-1:-1;;;;;39204:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;38939:309;;;:::o;40511:44::-;;;;;;;;;;;;;:::o;21465:500::-;21564:16;21618:4;:11;21600:7;:14;:29;21592:86;;;;-1:-1:-1;;;21592:86:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21705:30;21752:7;:14;21738:29;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;21738:29:0;-1:-1:-1;21705:62:0;-1:-1:-1;21826:9:0;21821:110;21845:7;:14;21841:1;:18;21821:110;;;21894:8;:20;21903:7;21911:1;21903:10;;;;;;;;;;;;;;-1:-1:-1;;;;;21894:20:0;-1:-1:-1;;;;;21894:20:0;;;;;;;;;;;;:29;21915:4;21920:1;21915:7;;;;;;;;;;;;;;21894:29;;;;;;;;;;;;21875:13;21889:1;21875:16;;;;;;;;;;;;;;;;;:48;21861:3;;21821:110;;;-1:-1:-1;21946:13:0;21465:500;-1:-1:-1;;;21465:500:0:o;41970:335::-;35955:10;35945:21;;;;:9;:21;;;;;;;;35937:47;;;;;-1:-1:-1;;;35937:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;42150:19;;;;:14;:19;;;;;;;;;42131:11;:16;;;;;;;:38;42123:69;;;;;-1:-1:-1;;;42123:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;42203:33;42209:3;42214;42219:9;42230:5;42203;:33::i;:::-;42266:16;;;;:11;:16;;;;;;:31;;42287:9;42266:31;:20;:31;:::i;:::-;42247:16;;;;:11;:16;;;;;;:50;;;;-1:-1:-1;;;41970:335:0:o;36333:203::-;35854:5;;-1:-1:-1;;;;;35854:5:0;35840:10;:19;35832:42;;;;;-1:-1:-1;;;35832:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36410:22:0;;36402:46;;;;;-1:-1:-1;;;36402:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;36464:30;;;-1:-1:-1;;;;;36464:30:0;;;;;;;;;;;;;;;36505:12;:23;;;;-1:-1:-1;;;;;36505:23:0;;;;;;;;;;36333:203::o;37138:214::-;37186:12;;-1:-1:-1;;;;;37186:12:0;37202:10;37186:26;37178:50;;;;;-1:-1:-1;;;37178:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;37257:12;;37271:5;;37244:33;;;-1:-1:-1;;;;;37257:12:0;;;37244:33;;37271:5;;;;37244:33;;;;;;;;;;;;;;;;37296:12;;;37288:5;:20;;;;;;-1:-1:-1;;;;;37296:12:0;;37288:20;;;;37319:25;;;37138:214::o;41738:224::-;35955:10;41805:7;35945:21;;;:9;:21;;;;;;;;35937:47;;;;;-1:-1:-1;;;35937:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;41825:11;41839:17;:15;:17::i;:::-;41825:31;;41867:23;:21;:23::i;:::-;41901:19;;;;:14;:19;;;;;:32;;;;-1:-1:-1;41901:19:0;41738:224::o;36717:244::-;35854:5;;-1:-1:-1;;;;;35854:5:0;35840:10;:19;35832:42;;;;;-1:-1:-1;;;35832:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36801:22:0;;36793:42;;;;;-1:-1:-1;;;36793:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;36851:30;;;-1:-1:-1;;;;;36851:30:0;;;;;;;;;;;;;;;36920:5;;36897:29;;;-1:-1:-1;;;;;36897:29:0;;;;;36920:5;;;36897:29;;;;;;;;;;;;;;;;36937:5;:16;;;;-1:-1:-1;;;;;36937:16:0;;;;;;;;;;36717:244::o;41437:139::-;35854:5;;-1:-1:-1;;;;;35854:5:0;35840:10;:19;35832:42;;;;;-1:-1:-1;;;35832:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;41528:40;41548:19;41528;:40::i;:::-;41437:139;:::o;43890:107::-;43943:7;43970:19;;;:14;:19;;;;;;;43890:107::o;40633:20::-;;;;;;;;;;;;;;;-1:-1:-1;;40633:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37421:360;35854:5;;-1:-1:-1;;;;;35854:5:0;35840:10;:19;35832:42;;;;;-1:-1:-1;;;35832:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37500:22:0;;;;;;:9;:22;;;;;;;;37499:23;37491:51;;;;;-1:-1:-1;;;37491:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;37584:14;:21;35662:2;-1:-1:-1;37576:64:0;;;;;-1:-1:-1;;;37576:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;37658:32;;;-1:-1:-1;;;;;37658:32:0;;;;37685:4;37658:32;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37701:22:0;;;;;:9;:22;;;;;:29;;;;37726:4;37701:29;;;;;;37741:14;27:10:-1;;23:18;;;45:23;;37741:32:0;;;;;;;;;;;;;;37421:360::o;20056:227::-;20183:10;20173:21;;;;:9;:21;;;;;;;;-1:-1:-1;;;;;20173:32:0;;;;;;;;;;;;:44;;;;;;;;;;;;;20229:48;;;;;;;20173:32;;20183:10;20229:48;;;;;;;;;;;20056:227;;:::o;37789:498::-;35854:5;;-1:-1:-1;;;;;35854:5:0;35840:10;:19;35832:42;;;;;-1:-1:-1;;;35832:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37867:19:0;;;;;;:9;:19;;;;;;;;37859:44;;;;;-1:-1:-1;;;37859:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37914:19:0;;37936:5;37914:19;;;:9;:19;;;;;:27;;;;;;37954:326;37978:14;:21;37974:25;;37954:326;;;38046:8;-1:-1:-1;;;;;38025:29:0;:14;38040:1;38025:17;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38025:17:0;:29;38021:248;;;38095:14;38110:21;;-1:-1:-1;;38110:25:0;;;38095:41;;;;;;;;;;;;;;;;38075:14;:17;;-1:-1:-1;;;;;38095:41:0;;;;38090:1;;38075:17;;;;;;;;;;;;;;:61;;;;;-1:-1:-1;;;;;38075:61:0;;;;;-1:-1:-1;;;;;38075:61:0;;;;;;38155:14;:20;;;;;;;;;;;;;;;;;-1:-1:-1;;38155:20:0;;;;;;;;;;;;;;;38199:30;;;-1:-1:-1;;;;;38199:30:0;;;;;;;;;;;;;;;;;;;;;;;;38248:5;;38021:248;38001:3;;37954:326;;;;37789:498;:::o;42313:440::-;35955:10;35945:21;;;;:9;:21;;;;;;;;35937:47;;;;;-1:-1:-1;;;35937:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;42497:9;42492:202;42516:4;:11;42512:1;:15;42492:202;;;42549:11;42563:4;42568:1;42563:7;;;;;;;;;;;;;;42549:21;;42585:16;42604:11;42616:1;42604:14;;;;;;;;;;;;;;42585:33;;42652:30;42673:8;42652:11;:16;42664:3;42652:16;;;;;;;;;;;;:20;;:30;;;;:::i;:::-;42633:16;;;;:11;:16;;;;;;:49;;;;-1:-1:-1;42529:3:0;;42492:202;;;;42704:41;42715:3;42720:4;42726:11;42739:5;42704:10;:41::i;:::-;42313:440;;;;:::o;41323:106::-;41378:7;41405:16;;;:11;:16;;;;;;;41323:106::o;39303:221::-;35854:5;;-1:-1:-1;;;;;35854:5:0;35840:10;:19;35832:42;;;;;-1:-1:-1;;;35832:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;39415:29;;39397:12;;-1:-1:-1;;;;;39415:11:0;;;39433:6;;39397:12;39415:29;39397:12;39415:29;39433:6;39415:11;:29;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;39396:48:0;;;39463:7;39455:16;;;;;;39487:29;;;;;;-1:-1:-1;;;;;39487:29:0;;;;;;;;;;;;;;;;;;;35885:1;39303:221;;:::o;41584:146::-;35854:5;;-1:-1:-1;;;;;35854:5:0;35840:10;:19;35832:42;;;;;-1:-1:-1;;;35832:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;41678:20;:44;;;;-1:-1:-1;;;;;41678:44:0;;;;;;;;;;41584:146::o;43051:446::-;43300:20;;43344:29;;;;;;-1:-1:-1;;;;;43344:29:0;;;;;;;;;43160:15;;43300:20;;;43336:51;;;43300:20;;43344:21;;:29;;;;;;;;;;;;;;;43300:20;43344:29;;;5:2:-1;;;;30:1;27;20:12;5:2;43344:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;43344:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;43344:29:0;-1:-1:-1;;;;;43336:51:0;;43332:95;;;43411:4;43404:11;;;;;43332:95;43446:43;43471:6;43479:9;43446:24;:43::i;:::-;43439:50;43051:446;-1:-1:-1;;;;43051:446:0:o;15289:545::-;15424:10;-1:-1:-1;;;;;15424:19:0;;;;15423:60;;;15448:35;15465:5;15472:10;15448:16;:35::i;:::-;15415:115;;;;-1:-1:-1;;;15415:115:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15545:17:0;;15537:72;;;;-1:-1:-1;;;15537:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15723:43;15741:5;15748:3;15753;15758:7;15723:17;:43::i;:::-;15773:55;15796:5;15803:3;15808;15813:7;15822:5;15773:22;:55::i;42761:282::-;35955:10;35945:21;;;;:9;:21;;;;;;;;35937:47;;;;;-1:-1:-1;;;35937:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;42885:26;42891:5;42898:3;42903:7;42885:5;:26::i;:::-;42944:19;;;;:14;:19;;;;;;:32;;42968:7;42944:32;:23;:32;:::i;:::-;42922:19;;;;:14;:19;;;;;;;;:54;;;;43006:11;:16;;;;:29;;43027:7;43006:29;:20;:29;:::i;:::-;42987:16;;;;:11;:16;;;;;;:48;;;;-1:-1:-1;;42761:282:0:o;35468:20::-;;;-1:-1:-1;;;;;35468:20:0;;:::o;43505:107::-;43589:15;;-1:-1:-1;43582:22:0;;43505:107::o;31939:498::-;31992:27;32036:7;32032:50;;-1:-1:-1;32060:10:0;;;;;;;;;;;;;;;;;;;32032:50;32104:2;32092:9;32139:69;32146:6;;32139:69;;32169:5;;32194:2;32189:7;;;;32139:69;;;32218:17;32248:3;32238:14;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;32238:14:0;87:34:-1;135:17;;-1:-1;32238:14:0;-1:-1:-1;32218:34:0;-1:-1:-1;;;32275:7:0;;32293:107;32300:7;;32293:107;;32360:2;32355;:7;32349:2;:14;32336:29;;32324:4;32329:3;;;;;;;32324:9;;;;;;;;;;;:41;;;;;;;;;;-1:-1:-1;32386:2:0;32380:8;;;;32293:107;;;-1:-1:-1;32424:4:0;31939:498;-1:-1:-1;;;;31939:498:0:o;31783:148::-;31861:13;31894:29;31904:2;31908;31894:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:9;:29::i;:::-;31887:36;31783:148;-1:-1:-1;;;31783:148:0:o;18366:687::-;18523:8;:15;18508:4;:11;:30;18500:96;;;;-1:-1:-1;;;18500:96:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18663:11;;18643:17;18715:247;18739:9;18735:1;:13;18715:247;;;18840:41;18869:8;18878:1;18869:11;;;;;;;;;;;;;;18840:8;:15;18849:5;-1:-1:-1;;;;;18840:15:0;-1:-1:-1;;;;;18840:15:0;;;;;;;;;;;;:24;18856:4;18861:1;18856:7;;;;;;;;;;;;;;18840:24;;;;;;;;;;;;:28;;:41;;;;:::i;:::-;18813:8;:15;18822:5;-1:-1:-1;;;;;18813:15:0;-1:-1:-1;;;;;18813:15:0;;;;;;;;;;;;:24;18829:4;18834:1;18829:7;;;;;;;;;;;;;;18813:24;;;;;;;;;;;:68;;;;18915:39;18942:8;18951:1;18942:11;;;;;;;;;;;;;;18915:8;:13;18924:3;-1:-1:-1;;;;;18915:13:0;-1:-1:-1;;;;;18915:13:0;;;;;;;;;;;;:22;18929:4;18934:1;18929:7;;;;;;;;;;;;;;18915:22;;;;;;;;;;;;:26;;:39;;;;:::i;:::-;18890:8;:13;18899:3;-1:-1:-1;;;;;18890:13:0;-1:-1:-1;;;;;18890:13:0;;;;;;;;;;;;:22;18904:4;18909:1;18904:7;;;;;;;;;;;;;;;;;;;18890:22;;;;;;;;;;-1:-1:-1;18890:22:0;:64;18750:3;;18715:247;;;;19027:3;-1:-1:-1;;;;;18994:53:0;19020:5;-1:-1:-1;;;;;18994:53:0;19008:10;-1:-1:-1;;;;;18994:53:0;;19032:4;19038:8;18994:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;18994:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;18994:53:0;;;;;;;;;;;;;;;;;;;18366:687;;;;;:::o;19171:476::-;19377:16;:3;-1:-1:-1;;;;;19377:14:0;;:16::i;:::-;19373:269;;;19404:13;19442:3;-1:-1:-1;;;;;19420:49:0;;19470:10;19482:5;19489:4;19495:8;19505:5;19420:91;;;;;;;;;;;;;-1:-1:-1;;;;;19420:91:0;-1:-1:-1;;;;;19420:91:0;;;;;;-1:-1:-1;;;;;19420:91:0;-1:-1:-1;;;;;19420:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;19420:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;19420:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;19420:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19420:91:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19420:91:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19420:91:0;;-1:-1:-1;19528:38:0;;;19538:28;19528:38;19520:114;;;;-1:-1:-1;;;19520:114:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19373:269;19171:476;;;;;:::o;39628:337::-;38506:34;;;;;;;;;;;;;;;;;39807:43;;-1:-1:-1;;;;;39807:43:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;39807:43:0;;;;;;25:18:-1;;;61:17;;39807:43:0;182:15:-1;39807:43:0;179:29:-1;160:49;;39782:79:0;;;;39747:12;;39761:17;;39782:10;;;39807:43;39782:79;;;25:18:-1;39782:79:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;39782:79:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;39746:115:0;;;;39880:7;:57;;;;-1:-1:-1;39892:11:0;;:16;;:44;;;39923:4;39912:24;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39912:24:0;39892:44;39872:85;;;;;-1:-1:-1;;;39872:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;27246:401;-1:-1:-1;;;;;27389:13:0;;:8;:13;;;;;;;;;;;:18;;;;;;;;;:31;;27412:7;27389:31;:22;:31;:::i;:::-;-1:-1:-1;;;;;27368:13:0;;:8;:13;;;;;;;;;;;:18;;;;;;;;:52;;;;27453:59;;;;;;;;;;;;;27368:13;;:8;;27468:10;;27453:59;;;;;;;;27579:62;27610:3;27616;27621;27626:7;27635:5;27579:22;:62::i;2121:163::-;2179:7;2207:5;;;2227:6;;;;2219:41;;;;;-1:-1:-1;;;2219:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;43620:106;43696:15;;43669:7;;43696:22;;43716:1;43696:22;:19;:22;:::i;:::-;43689:29;;43620:106;:::o;43805:77::-;43857:15;:17;;;;;;43805:77::o;25607:123::-;25687:37;;;;:15;;:37;;;;;:::i;27934:724::-;28084:8;:15;28069:4;:11;:30;28061:91;;;;-1:-1:-1;;;28061:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28212:11;;28196:13;28263:150;28287:5;28283:1;:9;28263:150;;;28366:39;28393:8;28402:1;28393:11;;;;;;;;;;;;;;28366:8;:13;28375:3;-1:-1:-1;;;;;28366:13:0;-1:-1:-1;;;;;28366:13:0;;;;;;;;;;;;:22;28380:4;28385:1;28380:7;;;;;;;28366:39;28341:8;:13;28350:3;-1:-1:-1;;;;;28341:13:0;-1:-1:-1;;;;;28341:13:0;;;;;;;;;;;;:22;28355:4;28360:1;28355:7;;;;;;;;;;;;;;;;;;;28341:22;;;;;;;;;;-1:-1:-1;28341:22:0;:64;28294:3;;28263:150;;;;28496:3;-1:-1:-1;;;;;28456:60:0;28490:3;-1:-1:-1;;;;;28456:60:0;28470:10;-1:-1:-1;;;;;28456:60:0;;28501:4;28507:8;28456:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;28456:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;28456:60:0;;;;;;;;;;;;;;;;;;;28583:69;28619:3;28625;28630:4;28636:8;28646:5;28583:27;:69::i;20542:155::-;-1:-1:-1;;;;;20663:17:0;;;20629:15;20663:17;;;:9;:17;;;;;;;;:28;;;;;;;;;;;;;;;20542:155::o;17142:376::-;-1:-1:-1;;;;;17298:15:0;;:8;:15;;;;;;;;;;;:20;;;;;;;;;:33;;17323:7;17298:33;:24;:33;:::i;:::-;-1:-1:-1;;;;;17275:15:0;;;:8;:15;;;;;;;;;;;:20;;;;;;;;:56;;;;17378:13;;;;;;;;;;;:18;;;;;;;;:31;;17401:7;17378:31;:22;:31;:::i;:::-;-1:-1:-1;;;;;17357:13:0;;;:8;:13;;;;;;;;;;;:18;;;;;;;;;:52;;;;17460;;;;;;;;;;;;;17357:13;;17460:52;;;;17475:10;;17460:52;;;;;;;;;;;17142:376;;;;:::o;17631:429::-;17808:16;:3;-1:-1:-1;;;;;17808:14:0;;:16::i;:::-;17804:251;;;17835:13;17873:3;-1:-1:-1;;;;;17851:44:0;;17896:10;17908:5;17915:3;17920:7;17929:5;17851:84;;;;;;;;;;;;;-1:-1:-1;;;;;17851:84:0;-1:-1:-1;;;;;17851:84:0;;;;;;-1:-1:-1;;;;;17851:84:0;-1:-1:-1;;;;;17851:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;17851:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17851:84:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17851:84:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17851:84:0;;-1:-1:-1;17952:32:0;;;17962:22;17952:32;17944:103;;;;-1:-1:-1;;;17944:103:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29016:265;-1:-1:-1;;;;;29148:15:0;;:8;:15;;;;;;;;;;;:20;;;;;;;;;:33;;29173:7;29148:33;:24;:33;:::i;:::-;-1:-1:-1;;;;;29125:15:0;;:8;:15;;;;;;;;;;;:20;;;;;;;;:56;;;;29214:61;;;;;;;;;;;;;29125:8;;29229:10;;29214:61;;;;;;;;;;29016:265;;;:::o;1878:163::-;1936:7;1965:1;1960;:6;;1952:42;;;;;-1:-1:-1;;;1952:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2013:5:0;;;1878:163::o;30338:994::-;30522:13;30548:16;30573:2;30548:28;;30587:16;30612:2;30587:28;;30626:16;30651:2;30626:28;;30665:16;30690:2;30665:28;;30704:16;30729:2;30704:28;;30743:19;30842:3;:10;30829:3;:10;30816:3;:10;30803:3;:10;30790:3;:10;:23;:36;:49;:62;30765:98;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;30765:98:0;87:34:-1;135:17;;-1:-1;30765:98:0;-1:-1:-1;30743:120:0;-1:-1:-1;30743:120:0;30919:9;;30943:61;30967:3;:10;30963:1;:14;30943:61;;;30998:3;31002:1;30998:6;;;;;;;;;;;;;;;;30984;30991:3;;;;;;30984:11;;;;;;;;;;;:20;;;;;;;;;;-1:-1:-1;30979:3:0;;30943:61;;;-1:-1:-1;31020:9:0;31015:61;31039:3;:10;31035:1;:14;31015:61;;;31070:3;31074:1;31070:6;;;;;;;;;;;;;;;;31056;31063:3;;;;;;31056:11;;;;;;;;;;;:20;;;;;;;;;;-1:-1:-1;31051:3:0;;31015:61;;;-1:-1:-1;31092:9:0;31087:61;31111:3;:10;31107:1;:14;31087:61;;;31142:3;31146:1;31142:6;;;;;;;;;;;;;;;;31128;31135:3;;;;;;31128:11;;;;;;;;;;;:20;;;;;;;;;;-1:-1:-1;31123:3:0;;31087:61;;;-1:-1:-1;31164:9:0;31159:61;31183:3;:10;31179:1;:14;31159:61;;;31214:3;31218:1;31214:6;;;;;;;;;;;;;;;;31200;31207:3;;;;;;31200:11;;;;;;;;;;;:20;;;;;;;;;;-1:-1:-1;31195:3:0;;31159:61;;;-1:-1:-1;31236:9:0;31231:61;31255:3;:10;31251:1;:14;31231:61;;;31286:3;31290:1;31286:6;;;;;;;;;;;;;;;;31272;31279:3;;;;;;31272:11;;;;;;;;;;;:20;;;;;;;;;;-1:-1:-1;31267:3:0;;31231:61;;;-1:-1:-1;31317:6:0;;30338:994;-1:-1:-1;;;;;;;;;;;;;30338:994:0:o;12945:673::-;13005:4;13533:20;;13063:66;13569:15;;;;;:42;;-1:-1:-1;13588:23:0;;;13561:51;-1:-1:-1;;12945:673:0:o;40207:3793::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40207:3793:0;;;-1:-1:-1;40207:3793:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;

Swarm Source

bzzr://bb18defe7ca16e9ef43c094f64d4fb2bc9c7785e892acac6379ee2022e65c072
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.