class SameAsBound extends Bound {
    private ResolvedType s;
    private ResolvedType t;

    public SameAsBound(ResolvedType s, ResolvedType t) {
        if (!s.isInferenceVariable() && !t.isInferenceVariable()) {
            throw new IllegalArgumentException("One of S or T should be an inference variable");
        }
        this.s = s;
        this.t = t;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        SameAsBound that = (SameAsBound) o;

        if (!s.equals(that.s)) return false;
        return t.equals(that.t);
    }

    @Override
    public String toString() {<FILL_FUNCTION_BODY>}

    @Override
    public int hashCode() {
        int result = s.hashCode();
        result = 31 * result + t.hashCode();
        return result;
    }

    @Override
    public Set<InferenceVariable> usedInferenceVariables() {
        Set<InferenceVariable> variables = new HashSet<>();
        variables.addAll(TypeHelper.usedInferenceVariables(s));
        variables.addAll(TypeHelper.usedInferenceVariables(t));
        return variables;
    }

    public ResolvedType getS() {
        return s;
    }

    public ResolvedType getT() {
        return t;
    }

    @Override
    public boolean isADependency() {
        return !isAnInstantiation().isPresent();
    }

    @Override
    public Optional<Instantiation> isAnInstantiation() {
        if (s.isInferenceVariable() && isProperType(t)) {
            return Optional.of(new Instantiation((InferenceVariable) s, t));
        }
        if (isProperType(s) && t.isInferenceVariable()) {
            return Optional.of(new Instantiation((InferenceVariable) t, s));
        }
        return Optional.empty();
    }

    @Override
    public boolean isSatisfied(InferenceVariableSubstitution inferenceVariableSubstitution) {
        throw new UnsupportedOperationException();
    }
}

        return "SameAsBound{" +
                "s=" + s +
                ", t=" + t +
                '}';
    
<methods>public non-sealed void <init>() ,public boolean isADependency() ,public Optional<com.github.javaparser.symbolsolver.resolution.typeinference.Instantiation> isAnInstantiation() ,public Optional<com.github.javaparser.symbolsolver.resolution.typeinference.ProperLowerBound> isProperLowerBound() ,public Optional<com.github.javaparser.symbolsolver.resolution.typeinference.ProperUpperBound> isProperUpperBound() ,public abstract boolean isSatisfied(com.github.javaparser.symbolsolver.resolution.typeinference.InferenceVariableSubstitution) ,public abstract Set<com.github.javaparser.symbolsolver.resolution.typeinference.InferenceVariable> usedInferenceVariables() <variables>