return 1;
    private int fireMe(FlatNode fire, SimulationCounter counters, HashMap executionCounts)     {	//System.out.println("Firing " + Namer.getName(fire.contents));		if (fire.contents instanceof SIRFilter) {	    //decrement the schedule execution counter	    int oldVal = ((Integer)executionCounts.get(fire)).intValue();	    if (oldVal - 1 < 0)		Utils.fail("Executed too much");	    executionCounts.put(fire, new Integer(oldVal - 1));	    	    counters.decrementBufferCount(fire, 					  itemsNeededToFire(fire, counters));	    	    //for a steady state execution return the normal push	    int ret = ((SIRFilter)fire.contents).getPushInt();	    //if the filter is a two stage, and it has not fired	    //return the initPush()	    if (fire.contents instanceof SIRTwoStageFilter)		if (!counters.hasFired(fire))		    ret = ((SIRTwoStageFilter)fire.contents).getInitPush();	    	    //now this node has fired	    counters.setFired(fire);	    return ret;	}	else if (fire.contents instanceof SIRJoiner) {	    //System.out.println("Firing a joiner");	    	    //determine if this joiner fired because of an initpath call	    //if so just increment the number of calls to the initpath	    if (counters.canFeedbackJoinerFire(fire)) {		counters.incrementInitPathCall(fire);	    }	    else { //else, this joiner fired because it received data		//that can be sent on		JoinerScheduleNode previous = 		    (JoinerScheduleNode)currentJoinerCode.get(fire);		JoinerScheduleNode current = new JoinerScheduleNode();		current.buffer = counters.getJoinerBuffer(fire);		current.type = JoinerScheduleNode.FIRE;		previous.next = current;		//set current		currentJoinerCode.put(fire, current);		//decrement the buffer		counters.decrementJoinerBufferCount(fire, counters.getJoinerBuffer(fire));		//step the schedule		counters.incrementJoinerSchedule(fire);	    }	    //joiners produce one item per firing	    return 1;	}	Utils.fail("Trying to fire a non-filter or joiner");	return -1;    }