public IEnumerable <RequestSequence> Generate(List <KnownEndpoint> endpoints, RequestSequence sequence, List <TokenCollection> sequenceResults) { if (dictionary.Count == 0) { yield break; } for (int i = 0; i < MaxSubstitutions; ++i) { if (sequence.StageCount() == 0) { continue; } RequestSequence newSequence = sequence.Copy(); int selectedStage = rand.Next(0, newSequence.StageCount()); Stage stage = newSequence.Get(selectedStage); if (stage.Substitutions.Count == 0) { continue; } int subIndex = rand.Next(0, newSequence.Get(selectedStage).Substitutions.Count); ISubstitution sub = newSequence.Get(selectedStage).Substitutions[subIndex]; newSequence.Get(selectedStage).Substitutions.RemoveAt(subIndex); string replacement = dictionary[rand.Next(0, dictionary.Count)]; SubstituteConstant substituteConstant = new SubstituteConstant(sub.GetTarget(), replacement); newSequence.Get(selectedStage).Substitutions.Add(substituteConstant); yield return(newSequence); } yield break; }