docs: public MultiFileOutputStream init(UploadObjectObserver observer,
              long partSize, long diskLimit) {
          if (observer == null)
              throw new IllegalArgumentException("Observer must be specified");
          this.observer = observer;
          if (diskLimit < partSize << 1) {
              throw new IllegalArgumentException(
                  "Maximum temporary disk space must be at least twice as large as the part size: partSize="
                  + partSize + ", diskSize=" + diskLimit);
          }
          this.partSize = partSize;
          this.diskLimit = diskLimit;
          final int max = (int)(diskLimit/partSize);
          this.diskPermits = max < 0 ? null : new Semaphore(max);
          return this;
      }