}
}
}
game.informPlayers(controller.getName() + " moves " + amountExiled + " card" + (amountExiled == 1 ? " ":"s ") + "from library to hand");
TargetCardInExile target2 = new TargetCardInExile(filter2, source.getSourceId());
ExileZone scrollRackExileZone = game.getExile().getExileZone(source.getSourceId());
if (scrollRackExileZone != null) {
while (controller.isInGame() && scrollRackExileZone.count(filter, game) > 1) {
controller.lookAtCards("exiled cards with " + sourceObject.getLogName(), scrollRackExileZone, game);
controller.choose(Outcome.Neutral, scrollRackExileZone, target2, game);
Card card = game.getCard(target2.getFirstTarget());
if (card != null) {
game.getExile().removeCard(card, game);
controller.moveCardToLibraryWithInfo(card, source.getSourceId(), game, Zone.EXILED, true, false);
}
target2.clearChosen();
}
if (scrollRackExileZone.count(filter, game) == 1) {
Card card = scrollRackExileZone.get(scrollRackExileZone.iterator().next(), game);
controller.moveCardToLibraryWithInfo(card, source.getSourceId(), game, Zone.EXILED, true, false);
}