class ClusterRole {

    private final String node;
    private long clock;
    private final int epoch;
    private final String url;

    public ClusterRole(String node, String url, int epoch) {
        this(node, url, epoch, 1);
    }

    public ClusterRole(String node, String url, int epoch, long clock) {
        this.node = node;
        this.url = url;
        this.epoch = epoch;
        this.clock = clock;
    }

    public void increaseClock() {
        this.clock++;
    }

    public boolean isMaster(String node) {
        return Objects.equals(this.node, node);
    }

    public int epoch() {
        return this.epoch;
    }

    public long clock() {
        return this.clock;
    }

    public void clock(long clock) {
        this.clock = clock;
    }

    public String node() {
        return this.node;
    }

    public String url() {
        return this.url;
    }

    @Override
    public boolean equals(Object obj) {<FILL_FUNCTION_BODY>}

    @Override
    public int hashCode() {
        return Objects.hash(node, clock, epoch);
    }

    @Override
    public String toString() {
        return "RoleStateData{" +
               "node='" + node + '\'' +
               ", clock=" + clock +
               ", epoch=" + epoch +
               '}';
    }
}

        if (this == obj) {
            return true;
        }
        if (!(obj instanceof ClusterRole)) {
            return false;
        }
        ClusterRole clusterRole = (ClusterRole) obj;
        return clock == clusterRole.clock &&
               epoch == clusterRole.epoch &&
               Objects.equals(node, clusterRole.node);
    
<no_super_class>