docs: private static void recDrawSides(SVGPlot plot, Element group, String cls, double minx, double miny, List<double[]> r_edges, int off, long[] b) {
      StringBuilder pbuf = new StringBuilder();
      // Draw all "missing" sides
      for(int i = 0; i < r_edges.size() - 1; i++) {
        if(BitsUtil.get(b, i)) {
          continue;
        }
        double[] deltai = r_edges.get(i);
        final double xi = minx + deltai[0];
        if(!isFinite(xi)) {
          continue;
        }
        final double yi = miny + deltai[1];
        if(!isFinite(yi)) {
          continue;
        }
        for(int j = i + 1; j < r_edges.size(); j++) {
          if(BitsUtil.get(b, j)) {
            continue;
          }
          double[] deltaj = r_edges.get(j);
          final double dxj = deltaj[0];
          if(!isFinite(xi)) {
            continue;
          }
          final double dyj = deltaj[1];
          if(!isFinite(dxj)) {
            continue;
          }
          pbuf.delete(0, pbuf.length()) // Clear
              .append(SVGUtil.fmt(minx)).append(',') //
              .append(SVGUtil.fmt(miny)).append(' ') //
              .append(SVGUtil.fmt(xi)).append(',') //
              .append(SVGUtil.fmt(yi)).append(' ') //
              .append(SVGUtil.fmt(xi + dxj)).append(',') //
              .append(SVGUtil.fmt(yi + dyj)).append(' ') //
              .append(SVGUtil.fmt(minx + dxj)).append(',') //
              .append(SVGUtil.fmt(miny + dyj));
  
          Element poly = plot.svgElement(SVGConstants.SVG_POLYGON_TAG, cls);
          SVGUtil.setAtt(poly, SVGConstants.SVG_POINTS_ATTRIBUTE, pbuf.toString());
          group.appendChild(poly);
        }
        // Recursion
        BitsUtil.setI(b, i);
        recDrawSides(plot, group, cls, xi, yi, r_edges, i + 1, b);
        BitsUtil.clearI(b, i);
      }
    }