docs: private void balance24(
      NodeStack     stack,
      GBSNode       bparent,         /* Parent of fringe balance point        */
      GBSNode       fpoint,          /* Fringe balance point                  */
      int           fpidx,           /* Index within stack of fpoint          */
      int           maxBal)          /* Maximum allowed fringe imbalance      */
    {
      /*
  
          k = 24,     2k-1 = 47,     k-1 = 23
  
      [A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W]      [23 children]
  
                         becomes:
  
  
                *-----------L-----------*
                |                       |
          *-----F-----*           *-----R-----*
          |           |           |           |
        *-C-*       *-I-*       *-O-*       *-U-*
        |   |       |   |       |   |       |   |
      *-B   D-*   *-H   J-*   *-N   P*-   *-T   V-*
      |       |   |       |   |       |   |       |
      A       E   G       K   M       Q   S       W
  
   ----------------------------------------------------
  
  
                *-----------L-----------*
                |                       |
          *-----F-----*           *-----R-----*
          |           |           |           |
        *-C-*       *-I-*       *-O-*       *-U-*
        |   |       |   |       |   |       |   |
      *-B   D-*   *-H   J-*   *-N   P*-   *-T   V-*                  [26 children]
      |       |   |       |   |       |   |       |
      A       E   G       K   M       Q   S       W - A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X
  
  
                         becomes:
  
  
  
                            *------------------------A------------------------*
                            |                                                 |
                *-----------L-----------*                         *-----------M-----------*
                |                       |                         |                       |
          *-----F-----*           *-----R-----*             *-----G-----*           *-----S-----*
          |           |           |           |             |           |           |           |
        *-C-*       *-I-*       *-O-*       *-U-*         *-D-*       *-J-*       *-P-*       *-V-*
        |   |       |   |       |   |       |   |         |   |       |   |       |   |       |   |
      *-B   D-*   *-H   J-*   *-N   P*-   *-T   V-*     *-C   E-*   *-I   K-*   *-O   Q*-   *-U   W-*
      |       |   |       |   |       |   |       |     |       |   |       |   |       |   |       |
      A       E   G       K   M       Q   S       W     B       F   H       L   N       R   T       X
  
                                                                        */
      if (maxBal == 23)
        {
          GBSNode b = fpoint.rightChild();
          GBSNode c = b.rightChild();
          GBSNode d = c.rightChild();
          GBSNode e = d.rightChild();
          GBSNode f = e.rightChild();
          GBSNode g = f.rightChild();
          GBSNode h = g.rightChild();
          GBSNode i = h.rightChild();
          GBSNode j = i.rightChild();
          GBSNode k = j.rightChild();
          GBSNode l = k.rightChild();
          GBSNode m = l.rightChild();
          GBSNode n = m.rightChild();
          GBSNode o = n.rightChild();
          GBSNode p = o.rightChild();
          GBSNode q = p.rightChild();
          GBSNode r = q.rightChild();
          GBSNode s = r.rightChild();
          GBSNode t = s.rightChild();
          GBSNode u = t.rightChild();
          GBSNode v = u.rightChild();
          l.setLeftChild(f);
          l.setRightChild(r);
          f.setLeftChild(c);
          f.setRightChild(i);
          c.setLeftChild(b);
          b.setLeftChild(fpoint);
          b.clearRightChild();
          fpoint.clearRightChild();
          e.clearRightChild();
          i.setLeftChild(h);
          h.setLeftChild(g);
          h.clearRightChild();
          g.clearRightChild();
          k.clearRightChild();
          r.setLeftChild(o);
          r.setRightChild(u);
          o.setLeftChild(n);
          o.setRightChild(p);
          n.setLeftChild(m);
          n.clearRightChild();
          m.clearRightChild();
          q.clearRightChild();
          u.setLeftChild(t);
          u.setRightChild(v);
          t.setLeftChild(s);
          t.clearRightChild();
          s.clearRightChild();
          if (bparent.rightChild() == fpoint)
            bparent.setRightChild(l);
          else
            bparent.setLeftChild(l);
        }
      else
        {
          if (maxBal != 26)
            error("fringeBalance24: maxBal != 26, maxBal = " + maxBal);
          GBSNode t0_top = stack.node(fpidx-4);
          GBSNode l1 = stack.node(fpidx-3);
          GBSNode w1 = fpoint.rightChild();
          GBSNode a = w1.rightChild();
          GBSNode b = a.rightChild();
          GBSNode c = b.rightChild();
          GBSNode d = c.rightChild();
          GBSNode e = d.rightChild();
          GBSNode f = e.rightChild();
          GBSNode g = f.rightChild();
          GBSNode h = g.rightChild();
          GBSNode i = h.rightChild();
          GBSNode j = i.rightChild();
          GBSNode k = j.rightChild();
          GBSNode l = k.rightChild();
          GBSNode m = l.rightChild();
          GBSNode n = m.rightChild();
          GBSNode o = n.rightChild();
          GBSNode p = o.rightChild();
          GBSNode q = p.rightChild();
          GBSNode r = q.rightChild();
          GBSNode s = r.rightChild();
          GBSNode t = s.rightChild();
          GBSNode u = t.rightChild();
          GBSNode v = u.rightChild();
          if (t0_top.rightChild() == l1)
            t0_top.setRightChild(a);
          else
            t0_top.setLeftChild(a);
          a.setLeftChild(l1);
          a.setRightChild(m);
          m.setLeftChild(g);
          m.setRightChild(s);
          g.setLeftChild(d);
          g.setRightChild(j);
          d.setLeftChild(c);
          c.setLeftChild(b);
          c.clearRightChild();
          b.clearRightChild();
          f.clearRightChild();
          j.setLeftChild(i);
          j.setRightChild(k);
          i.setLeftChild(h);
          i.clearRightChild();
          h.clearRightChild();
          l.clearRightChild();
          s.setLeftChild(p);
          s.setRightChild(v);
          p.setLeftChild(o);
          o.setLeftChild(n);
          o.clearRightChild();
          n.clearRightChild();
          r.clearRightChild();
          v.setLeftChild(u);
          u.setLeftChild(t);
          u.clearRightChild();
          t.clearRightChild();
          w1.clearRightChild();
          if ((fpidx > 4) && (stack.balancePointIndex() > -1))
            {
              GBSNode qpoint = a;
              stack.setNode(fpidx-3, qpoint);
              GBSInsertHeight.singleInstance().balance(stack, qpoint);
            }
        }
    }