docs: @Reference(authors = "D. Lemire", //
        title = "Fast random shuffling", //
        booktitle = "Daniel Lemire's blog", //
        url = "http://lemire.me/blog/2016/06/30/fast-random-shuffling/", //
        bibkey = "blog/Lemire16")
    public int nextIntRefined(int n) {
      if(n <= 0) {
        throw new IllegalArgumentException(BADBOUND);
      }
      seed = (seed * multiplier + addend) & mask;
      long ret = (seed >>> 16) * n;
      // Rejection sampling
      int leftover = (int) (ret & 0x7FFFFFFFL);
      if(leftover < n) {
        // With Java 8, we could use Integer.remainderUnsigned
        final long threshold = (-n & 0xFFFFFFFFL) % n;
        while(leftover < threshold) {
          seed = (seed * multiplier + addend) & mask;
          leftover = (int) ((ret = (seed >>> 16) * n) & 0x7FFFFFFFL);
        }
      }
      return (int) (ret >>> 32);
    }