docs: protected Throwable decomposeException(Exception e) {
          if (e instanceof IllegalStateException) {
              return (IllegalStateException) e;
          }
          if (e instanceof HystrixBadRequestException) {
              if (shouldNotBeWrapped(e.getCause())) {
                  return e.getCause();
              }
              return (HystrixBadRequestException) e;
          }
          if (e.getCause() instanceof HystrixBadRequestException) {
              if(shouldNotBeWrapped(e.getCause().getCause())) {
                  return e.getCause().getCause();
              }
              return (HystrixBadRequestException) e.getCause();
          }
          if (e instanceof HystrixRuntimeException) {
              return (HystrixRuntimeException) e;
          }
          // if we have an exception we know about we'll throw it directly without the wrapper exception
          if (e.getCause() instanceof HystrixRuntimeException) {
              return (HystrixRuntimeException) e.getCause();
          }
          if (shouldNotBeWrapped(e)) {
              return e;
          }
          if (shouldNotBeWrapped(e.getCause())) {
              return e.getCause();
          }
          // we don't know what kind of exception this is so create a generic message and throw a new HystrixRuntimeException
          String message = getLogMessagePrefix() + " failed while executing.";
          logger.debug(message, e); // debug only since we're throwing the exception and someone higher will do something with it
          return new HystrixRuntimeException(FailureType.COMMAND_EXCEPTION, this.getClass(), message, e, null);
  
      }