class UniformLongGenerator extends NumberGenerator {
  private final long lb, ub, interval;

  /**
   * Creates a generator that will return longs uniformly randomly from the 
   * interval [lb,ub] inclusive (that is, lb and ub are possible values)
   * (lb and ub are possible values).
   *
   * @param lb the lower bound (inclusive) of generated values
   * @param ub the upper bound (inclusive) of generated values
   */
  public UniformLongGenerator(long lb, long ub) {
    this.lb = lb;
    this.ub = ub;
    interval = this.ub - this.lb + 1;
  }

  @Override
  public Long nextValue() {<FILL_FUNCTION_BODY>}

  @Override
  public double mean() {
    return ((lb + (long) ub)) / 2.0;
  }
}

    long ret = Math.abs(ThreadLocalRandom.current().nextLong()) % interval  + lb;
    setLastValue(ret);

    return ret;
  
<methods>public non-sealed void <init>() ,public java.lang.Number lastValue() ,public abstract double mean() <variables>private java.lang.Number lastVal