docs: public static void setExchangeRequestPath(final HttpServerExchange exchange, final String encodedPath, final String charset, boolean decode, final boolean allowEncodedSlash, StringBuilder decodeBuffer, int maxParameters) throws ParameterLimitException {
          boolean requiresDecode = false;
          for (int i = 0; i < encodedPath.length(); ++i) {
              char c = encodedPath.charAt(i);
              if (c == '?') {
                  String part;
                  String encodedPart = encodedPath.substring(0, i);
                  if (requiresDecode) {
                      part = URLUtils.decode(encodedPart, charset, allowEncodedSlash,false, decodeBuffer);
                  } else {
                      part = encodedPart;
                  }
                  exchange.setRequestPath(part);
                  exchange.setRelativePath(part);
                  exchange.setRequestURI(encodedPart);
                  final String qs = encodedPath.substring(i + 1);
                  exchange.setQueryString(qs);
                  URLUtils.parseQueryString(qs, exchange, charset, decode, maxParameters);
                  return;
              } else if(c == ';') {
                  String part;
                  String encodedPart = encodedPath.substring(0, i);
                  if (requiresDecode) {
                      part = URLUtils.decode(encodedPart, charset, allowEncodedSlash, false, decodeBuffer);
                  } else {
                      part = encodedPart;
                  }
                  exchange.setRequestPath(part);
                  exchange.setRelativePath(part);
                  for(int j = i; j < encodedPath.length(); ++j) {
                      if (encodedPath.charAt(j) == '?') {
                          exchange.setRequestURI(encodedPath.substring(0, j));
                          String pathParams = encodedPath.substring(i + 1, j);
                          URLUtils.parsePathParams(pathParams, exchange, charset, decode, maxParameters);
                          String qs = encodedPath.substring(j + 1);
                          exchange.setQueryString(qs);
                          URLUtils.parseQueryString(qs, exchange, charset, decode, maxParameters);
                          return;
                      }
                  }
                  exchange.setRequestURI(encodedPath);
                  URLUtils.parsePathParams(encodedPath.substring(i + 1), exchange, charset, decode, maxParameters);
                  return;
              } else if(c == '%' || c == '+') {
                  requiresDecode = decode;
              }
          }
  
          String part;
          if (requiresDecode) {
              part = URLUtils.decode(encodedPath, charset, allowEncodedSlash, false, decodeBuffer);
          } else {
              part = encodedPath;
          }
          exchange.setRequestPath(part);
          exchange.setRelativePath(part);
          exchange.setRequestURI(encodedPath);
      }