public int hashCode(){
//        EDebug.print("The Hash is that is hashed, is truly hashed");
		int ret = 0;
		for (Object o: states)
			ret+= ((State) o).specialHash();
		for (Object o:transitions)
			ret+=((Transition) o).specialHash();
		for (Object o: myNotes)
			ret+=((Note) o).specialHash();
        ret+=finalStates.hashCode(); 
        ret+=initialState == null? 0: (int)(initialState.specialHash()*Math.PI); 

//        EDebug.print(ret);
		return ret;
	}