docs: @NotNull
      public List<SxGeoResult> getList(@NotNull String ip) {
          if (!IPV4_COMMA_SEPARATED_PATTERN.matcher(ip).matches()) {
              throw new IllegalArgumentException("Illegal IP address or list: " + ip);
          }
          clientQueriesCount++;
          List<SxGeoResult> cachedResult = cache == null ? null : cache.getList(ip);
          if (cachedResult != null) {
              return cachedResult;
          }
          try {
              NodeList ipNodes = query(ip);
              ArrayList<SxGeoResult> result = new ArrayList<>();
              for (int i = 0; i < ipNodes.getLength(); i++) {
                  result.add(parseIp((Element) ipNodes.item(i)));
              }
              if (cache != null) {
                  cache.add(ip, result);
              }
              return result;
          } catch (ParserConfigurationException | SAXException | IOException e) {
              throw new RuntimeException(e);
          }
      }