contract SupportsInterface is
  ERC165
{

  /**
   * @dev Mapping of supported intefraces. You must not set element 0xffffffff to true.
   */
  mapping(bytes4 => bool) internal supportedInterfaces;

  /**
   * @dev Contract constructor.
   */
  constructor()
  {
    supportedInterfaces[0x01ffc9a7] = true; // ERC165
  }

  /**
   * @dev Function to check which interfaces are suported by this contract.
   * @param _interfaceID Id of the interface.
   * @return True if _interfaceID is supported, false otherwise.
   */
  function supportsInterface(
    bytes4 _interfaceID
  )
    external
    override
    view
    returns (bool)
  {
    return supportedInterfaces[_interfaceID];
  }

}
/**
 * @dev Implementation of standard for detect smart contract interfaces.
 */
function supportsInterface(
  bytes4 _interfaceID
)
  external
  override
  view
  returns (bool)
{
  return supportedInterfaces[_interfaceID];
}

/**
 * @dev Function to check which interfaces are suported by this contract.
 * @param _interfaceID Id of the interface.
 * @return True if _interfaceID is supported, false otherwise.
 */