class Client extends AbstractClient implements IClient {

  static JSONObject loadQuestionFromText(String questionText, String questionSource) {
    try {
      JSONObject questionObj = new JSONObject(questionText);
      if (questionObj.has(BfConsts.PROP_INSTANCE) && !questionObj.isNull(BfConsts.PROP_INSTANCE)) {
        JSONObject instanceDataObj = questionObj.getJSONObject(BfConsts.PROP_INSTANCE);
        String instanceDataStr = instanceDataObj.toString();
        InstanceData instanceData =
            BatfishObjectMapper.mapper()
                .readValue(instanceDataStr, new TypeReference<InstanceData>() {});
        validateInstanceData(instanceData);
        return questionObj;
      } else {
        throw new BatfishException(
            String.format("Question in %s has no instance data", questionSource));
      }
    } catch (JSONException | IOException e) {
      throw new BatfishException("Failed to process question", e);
    }
  }

  public  Client(Settings settings);
  public  Client(String[] args);

}