docs: public int shrinkSuperNode(int dirCapacity) {
      if(!isSuperNode()) {
        throw new IllegalStateException("Cannot shrink a non-super node");
      }
      int newCapacity = getCapacity() / 2 + 1;
      if(numEntries >= newCapacity) {
        throw new IllegalStateException("This node is not yet underflowing and cannot be shrunken yet.");
      }
      Entry[] new_entries = java.util.Arrays.copyOfRange(super.entries, 0, newCapacity);
      assert new_entries[newCapacity - 1] == null;
      super.entries = new_entries;
      if(dirCapacity == getCapacity()) {
        supernode = false; // this node is no more a supernode
      }
      return getCapacity();
    }