You can assume: 1. Each track has a unique TrackName 2. Each train has a unique name 3. In the TrackData the track names refered to in the [Light] and [Control] refer to tracks in the [Track] 4. The tracks all join together to make a single connected network. 5. The initial state of each control is undefined (ie you can make it whatever you wish). Any users of the network will have to manually set all controls before they can use the network safely. 6. A track is controlled by at most one Control. 7. No pair of tracks will have more than one connection between them (eg a pair of simple tracks won't be connected at each end to form a loop of length two). 8. In the initial state of the network trains start at position 1 of their start track. So, for example, if the train moves with a speed of 3 in the first move it will still be on that track at the end of the first tick. 9. Signals do not stop a train *during* the tick in which it comes onto the track. But, regardless of its speed in the next and subsequent ticks, the train does no further moving until the signal is lowered. 10. Each train initially starts on a Simple track (not a fork or stop piece) 11. A single piece of track will not be both a pickup and a dropoff point for a single material, but it may be possible that a single piece of track might be a pickup point and dropoff point for different materials. For example, a single piece of track may be a pickup point for coal and a dropoff point for mail 12. The [Speed] input to makeNetwork will not be empty