docs: public static Flux<ByteBuf> split(final ByteBuf whole, final int chunkSize) {
          return Flux.generate(whole::readerIndex, (readFromIndex, synchronousSync) -> {
              final int writerIndex = whole.writerIndex();
              //
              if (readFromIndex >= writerIndex) {
                  synchronousSync.complete();
                  return writerIndex;
              } else {
                  int readSize = Math.min(writerIndex - readFromIndex, chunkSize);
                  // Netty slice operation will not increment the ref count.
                  //
                  // Here we invoke 'retain' on each slice, since
                  // consumer of the returned Flux stream is responsible for
                  // releasing each chunk as it gets consumed.
                  //
                  synchronousSync.next(whole.slice(readFromIndex, readSize).retain());
                  return readFromIndex + readSize;
              }
          });
      }