docs: @Pure
  	public static <T> int indexOf(List<T> list, Comparator<? super T> comparator, T elt) {
  		try {
  			assert comparator != null;
  			assert list != null;
  			if (elt == null) {
  				return -1;
  			}
  
  			int first = 0;
  			int last = list.size() - 1;
  
  			while (last >= first) {
  				int center = (first + last) / 2;
  				final T indata = list.get(center);
  				final int cmp = comparator.compare(elt, indata);
  				if (cmp == 0) {
  					do {
  						--center;
  					}
  					while (center >= 0 && comparator.compare(elt, list.get(center)) == 0);
  					return center + 1;
  				} else if (cmp < 0) {
  					last = center - 1;
  				} else {
  					first = center + 1;
  				}
  			}
  		} catch (AssertionError e) {
  			throw e;
  		} catch (Throwable exception) {
  			//
  		}
  		return -1;
  	}