private static <T> Supplier<T> lazy(Supplier<T> calculation) {
    return new Supplier<>() {
      T cached = null;
      @Override
      public T get() {
        T val = cached;
        if (val == null) {
          cached = val = calculation.get();
        }
        return val;
      }
    };
  }
private static <T> Supplier<T> lazy(Supplier<T> calculation)