@Override
    public Self clone() {
      try {
        //noinspection unchecked
        return (Self)super.clone();
      }
      catch (CloneNotSupportedException e) {
        throw new AssertionError(e);
      }
    }
@Override
    public Self clone()