diff --git a/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java b/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java index 907d6438d88..fd02a6cb98e 100644 --- a/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java @@ -1090,7 +1090,6 @@ public class ChangeZoneAi extends SpellAbilityAi { // Exile and bounce opponents stuff if (destination.equals(ZoneType.Exile) || origin.contains(ZoneType.Battlefield)) { - // don't rush bouncing stuff when not going to attack if (!immediately && game.getPhaseHandler().getPhase().isBefore(PhaseType.MAIN2) && game.getPhaseHandler().isPlayerTurn(ai) @@ -1433,17 +1432,14 @@ public class ChangeZoneAi extends SpellAbilityAi { final ZoneType destination = ZoneType.smartValueOf(sa.getParam("Destination")); final TargetRestrictions tgt = sa.getTargetRestrictions(); - CardCollection list = CardLists.getValidCards(ai.getGame().getCardsIn(tgt.getZone()), tgt.getValidTgts(), ai, source, sa); - list = CardLists.getTargetableCards(list, sa); - - list.removeAll(sa.getTargets().getTargetCards()); + CardCollection list = new CardCollection(CardUtil.getValidCardsToTarget(tgt, sa)); if (list.isEmpty()) { return false; } // target loop - while (sa.getTargets().size() < tgt.getMinTargets(sa.getHostCard(), sa)) { + while (!sa.isMinTargetChosen()) { // AI Targeting Card choice = null; diff --git a/forge-ai/src/main/java/forge/ai/ability/DamageDealAi.java b/forge-ai/src/main/java/forge/ai/ability/DamageDealAi.java index d6a2d2cbe30..4fbf12b2ae9 100644 --- a/forge-ai/src/main/java/forge/ai/ability/DamageDealAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/DamageDealAi.java @@ -757,7 +757,7 @@ public class DamageDealAi extends DamageAiBase { return false; } // TODO: Improve Damage, we shouldn't just target the player just because we can - if (sa.canTarget(enemy) && tcs.size() < tgt.getMaxTargets(source, sa)) { + if (sa.canTarget(enemy) && sa.canAddMoreTarget()) { if (((phase.is(PhaseType.END_OF_TURN) && phase.getNextTurn().equals(ai)) || (SpellAbilityAi.isSorcerySpeed(sa, ai) && phase.is(PhaseType.MAIN2)) || ("PingAfterAttack".equals(logic) && phase.getPhase().isAfter(PhaseType.COMBAT_DECLARE_ATTACKERS) && phase.isPlayerTurn(ai)) diff --git a/forge-ai/src/main/java/forge/ai/ability/DamagePreventAi.java b/forge-ai/src/main/java/forge/ai/ability/DamagePreventAi.java index 806c08fddfd..133fd5ce195 100644 --- a/forge-ai/src/main/java/forge/ai/ability/DamagePreventAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/DamagePreventAi.java @@ -130,7 +130,7 @@ public class DamagePreventAi extends SpellAbilityAi { ComputerUtilCard.sortByEvaluateCreature(combatants); for (final Card c : combatants) { - if (ComputerUtilCombat.combatantWouldBeDestroyed(ai, c, combat) && tcs.size() < tgt.getMaxTargets(hostCard, sa)) { + if (ComputerUtilCombat.combatantWouldBeDestroyed(ai, c, combat) && sa.canAddMoreTarget()) { tcs.add(c); chance = true; } diff --git a/forge-ai/src/main/java/forge/ai/ability/DebuffAi.java b/forge-ai/src/main/java/forge/ai/ability/DebuffAi.java index 119d4cb3e5c..448b7d0443e 100644 --- a/forge-ai/src/main/java/forge/ai/ability/DebuffAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/DebuffAi.java @@ -17,6 +17,7 @@ import forge.game.ability.AbilityUtils; import forge.game.card.Card; import forge.game.card.CardCollection; import forge.game.card.CardLists; +import forge.game.card.CardUtil; import forge.game.combat.Combat; import forge.game.cost.Cost; import forge.game.phase.PhaseHandler; @@ -24,7 +25,6 @@ import forge.game.phase.PhaseType; import forge.game.player.Player; import forge.game.spellability.SpellAbility; import forge.game.spellability.TargetRestrictions; -import forge.game.zone.ZoneType; public class DebuffAi extends SpellAbilityAi { @@ -195,16 +195,13 @@ public class DebuffAi extends SpellAbilityAi { */ private boolean debuffMandatoryTarget(final Player ai, final SpellAbility sa, final boolean mandatory) { final TargetRestrictions tgt = sa.getTargetRestrictions(); - CardCollection list = CardLists.getTargetableCards(ai.getGame().getCardsIn(ZoneType.Battlefield), sa); + List list = CardUtil.getValidCardsToTarget(tgt, sa); if (list.size() < tgt.getMinTargets(sa.getHostCard(), sa)) { sa.resetTargets(); return false; } - // Remove anything that's already been targeted - list.removeAll(sa.getTargets().getTargetCards()); - final CardCollection pref = CardLists.filterControlledBy(list, ai.getOpponents()); final CardCollection forced = CardLists.filterControlledBy(list, ai); final Card source = sa.getHostCard(); @@ -219,7 +216,7 @@ public class DebuffAi extends SpellAbilityAi { sa.getTargets().add(c); } - while (sa.getTargets().size() < tgt.getMinTargets(source, sa)) { + while (!sa.isMinTargetChosen()) { if (forced.isEmpty()) { break; } @@ -237,13 +234,13 @@ public class DebuffAi extends SpellAbilityAi { sa.getTargets().add(c); } - if (sa.getTargets().size() < tgt.getMinTargets(source, sa)) { + if (!sa.isMinTargetChosen()) { sa.resetTargets(); return false; } return true; - } // pumpMandatoryTarget() + } @Override protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) { diff --git a/forge-ai/src/main/java/forge/ai/ability/ProtectAi.java b/forge-ai/src/main/java/forge/ai/ability/ProtectAi.java index f27a3326521..8d21940b918 100644 --- a/forge-ai/src/main/java/forge/ai/ability/ProtectAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/ProtectAi.java @@ -20,13 +20,13 @@ import forge.game.ability.effects.ProtectEffect; import forge.game.card.Card; import forge.game.card.CardCollection; import forge.game.card.CardLists; +import forge.game.card.CardUtil; import forge.game.combat.Combat; import forge.game.phase.PhaseHandler; import forge.game.phase.PhaseType; import forge.game.player.Player; import forge.game.spellability.SpellAbility; import forge.game.spellability.TargetRestrictions; -import forge.game.zone.ZoneType; import forge.util.MyRandom; public class ProtectAi extends SpellAbilityAi { @@ -168,23 +168,23 @@ public class ProtectAi extends SpellAbilityAi { @Override protected boolean checkApiLogic(final Player ai, final SpellAbility sa) { - if (!sa.usesTargeting()) { - final List cards = AbilityUtils.getDefinedCards(sa.getHostCard(), sa.getParam("Defined"), sa); - if (cards.size() == 0) { - return false; - } else if (cards.size() == 1) { - // Affecting single card - return getProtectCreatures(ai, sa).contains(cards.get(0)); - } - /* - * when this happens we need to expand AI to consider if its ok - * for everything? for (Card card : cards) { // TODO if AI doesn't - * control Card and Pump is a Curse, than maybe use? - * } - */ - } else { + if (sa.usesTargeting()) { return protectTgtAI(ai, sa, false); } + + final List cards = AbilityUtils.getDefinedCards(sa.getHostCard(), sa.getParam("Defined"), sa); + if (cards.size() == 0) { + return false; + } else if (cards.size() == 1) { + // Affecting single card + return getProtectCreatures(ai, sa).contains(cards.get(0)); + } + /* + * when this happens we need to expand AI to consider if its ok + * for everything? for (Card card : cards) { // TODO if AI doesn't + * control Card and Pump is a Curse, than maybe use? + * } + */ return false; } @@ -256,21 +256,15 @@ public class ProtectAi extends SpellAbilityAi { } // protectTgtAI() private static boolean protectMandatoryTarget(final Player ai, final SpellAbility sa) { - final Game game = ai.getGame(); - final TargetRestrictions tgt = sa.getTargetRestrictions(); - CardCollection list = CardLists.getTargetableCards(game.getCardsIn(ZoneType.Battlefield), sa); + final Card source = sa.getHostCard(); + final List list = CardUtil.getValidCardsToTarget(tgt, sa); - if (list.size() < tgt.getMinTargets(sa.getHostCard(), sa)) { + if (list.size() < tgt.getMinTargets(source, sa)) { sa.resetTargets(); return false; } - // Remove anything that's already been targeted - for (final Card c : sa.getTargets().getTargetCards()) { - list.remove(c); - } - CardCollection pref = CardLists.filterControlledBy(list, ai); pref = CardLists.filter(pref, new Predicate() { @Override @@ -286,7 +280,6 @@ public class ProtectAi extends SpellAbilityAi { } }); final List forced = CardLists.filterControlledBy(list, ai); - final Card source = sa.getHostCard(); while (sa.canAddMoreTarget()) { if (pref.isEmpty()) { @@ -308,13 +301,13 @@ public class ProtectAi extends SpellAbilityAi { sa.getTargets().add(c); } - while (sa.getTargets().size() < tgt.getMinTargets(source, sa)) { + while (!sa.isMinTargetChosen()) { if (forced.isEmpty()) { break; } Card c; - if (CardLists.getNotType(forced, "Creature").size() == 0) { + if (CardLists.getNotType(forced, "Creature").isEmpty()) { c = ComputerUtilCard.getWorstCreatureAI(forced); } else { c = ComputerUtilCard.getCheapestPermanentAI(forced, sa, false); @@ -323,7 +316,7 @@ public class ProtectAi extends SpellAbilityAi { sa.getTargets().add(c); } - if (sa.getTargets().size() < tgt.getMinTargets(source, sa)) { + if (!sa.isMinTargetChosen()) { sa.resetTargets(); return false; } diff --git a/forge-ai/src/main/java/forge/ai/ability/PumpAi.java b/forge-ai/src/main/java/forge/ai/ability/PumpAi.java index 6d733072875..4f8e4f58f83 100644 --- a/forge-ai/src/main/java/forge/ai/ability/PumpAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/PumpAi.java @@ -616,23 +616,16 @@ public class PumpAi extends PumpAiBase { } private boolean pumpMandatoryTarget(final Player ai, final SpellAbility sa) { - final Game game = ai.getGame(); final TargetRestrictions tgt = sa.getTargetRestrictions(); - CardCollection list = CardLists.getTargetableCards(game.getCardsIn(ZoneType.Battlefield), sa); + List list = CardUtil.getValidCardsToTarget(tgt, sa); if (list.size() < tgt.getMinTargets(sa.getHostCard(), sa)) { sa.resetTargets(); return false; } - // Remove anything that's already been targeted - for (final Card c : sa.getTargets().getTargetCards()) { - list.remove(c); - } - CardCollection pref; CardCollection forced; - final Card source = sa.getHostCard(); if (sa.isCurse()) { pref = CardLists.filterControlledBy(list, ai.getOpponents()); @@ -652,7 +645,7 @@ public class PumpAi extends PumpAiBase { sa.getTargets().add(c); } - while (sa.getTargets().size() < tgt.getMinTargets(source, sa)) { + while (!sa.isMinTargetChosen()) { if (forced.isEmpty()) { break; } @@ -668,7 +661,7 @@ public class PumpAi extends PumpAiBase { sa.getTargets().add(c); } - if (sa.getTargets().size() < tgt.getMinTargets(source, sa)) { + if (!sa.isMinTargetChosen()) { sa.resetTargets(); return false; } diff --git a/forge-ai/src/main/java/forge/ai/ability/SetStateAi.java b/forge-ai/src/main/java/forge/ai/ability/SetStateAi.java index 5a8ac20146a..921a6d361d1 100644 --- a/forge-ai/src/main/java/forge/ai/ability/SetStateAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/SetStateAi.java @@ -97,13 +97,13 @@ public class SetStateAi extends SpellAbilityAi { for (final Card c : list) { if (shouldTransformCard(c, ai, ph) || "Always".equals(logic)) { sa.getTargets().add(c); - if (sa.getTargets().size() == tgt.getMaxTargets(source, sa)) { + if (sa.isMaxTargetChosen()) { break; } } } - return sa.getTargets().size() >= tgt.getMinTargets(source, sa); + return sa.isMinTargetChosen(); } } else if ("TurnFace".equals(mode)) { if (!sa.usesTargeting()) { diff --git a/forge-core/src/main/java/forge/StaticData.java b/forge-core/src/main/java/forge/StaticData.java index 329f363e863..f111aee7271 100644 --- a/forge-core/src/main/java/forge/StaticData.java +++ b/forge-core/src/main/java/forge/StaticData.java @@ -900,4 +900,17 @@ public class StaticData { this.enableSmartCardArtSelection = isEnabled; } + public boolean isRebalanced(String name) + { + if (!name.startsWith("A-")) { + return false; + } + for(PaperCard pc : this.getCommonCards().getAllCards(name)) { + CardEdition e = this.editions.get(pc.getEdition()); + if (e != null && e.isRebalanced(name)) { + return true; + } + } + return false; + } } diff --git a/forge-core/src/main/java/forge/card/CardEdition.java b/forge-core/src/main/java/forge/card/CardEdition.java index 743038d148a..f8672c74511 100644 --- a/forge-core/src/main/java/forge/card/CardEdition.java +++ b/forge-core/src/main/java/forge/card/CardEdition.java @@ -375,7 +375,8 @@ public final class CardEdition implements Comparable { public String getSheetReplaceCardFromSheet2() { return sheetReplaceCardFromSheet2; } public String[] getChaosDraftThemes() { return chaosDraftThemes; } - public List getCards() { return cardMap.get("cards"); } + public List getCards() { return cardMap.get(EditionSectionWithCollectorNumbers.CARDS.getName()); } + public List getRebalancedCards() { return cardMap.get(EditionSectionWithCollectorNumbers.REBALANCED.getName()); } public List getAllCardsInSet() { return cardsInSet; } @@ -401,6 +402,15 @@ public final class CardEdition implements Comparable { return this.cardsInSetLookupMap.get(cardName); } + public boolean isRebalanced(String cardName) { + for (CardInSet cis : getRebalancedCards()) { + if (cis.name.equals(cardName)) { + return true; + } + } + return false; + } + public boolean isModern() { return getDate().after(parseDate("2003-07-27")); } //8ED and above are modern except some promo cards and others public Map getTokens() { return tokenNormalized; } @@ -899,7 +909,7 @@ public final class CardEdition implements Comparable { } })); Iterator editionsIterator = editionsWithBasicLands.iterator(); - List selectedEditions = new ArrayList(); + List selectedEditions = new ArrayList(); while (editionsIterator.hasNext()) selectedEditions.add(editionsIterator.next()); if (selectedEditions.isEmpty()) diff --git a/forge-core/src/main/java/forge/item/IPaperCard.java b/forge-core/src/main/java/forge/item/IPaperCard.java index 5edece0287a..b130bda035d 100644 --- a/forge-core/src/main/java/forge/item/IPaperCard.java +++ b/forge-core/src/main/java/forge/item/IPaperCard.java @@ -223,6 +223,19 @@ public interface IPaperCard extends InventoryItem, Serializable { public static final Predicate IS_WHITE = Predicates.color(true, false, MagicColor.WHITE); public static final Predicate IS_COLORLESS = Predicates.color(true, true, MagicColor.COLORLESS); + public static final Predicate IS_UNREBALANCED = new Predicate() { + @Override + public boolean apply(PaperCard input) { + return input.isUnRebalanced(); + } + }; + public static final Predicate IS_REBALANCED = new Predicate() { + + @Override + public boolean apply(PaperCard input) { + return input.isRebalanced(); + } + }; } } @@ -246,4 +259,5 @@ public interface IPaperCard extends InventoryItem, Serializable { String getCardRSpecImageKey(); String getCardGSpecImageKey(); + public boolean isRebalanced(); } \ No newline at end of file diff --git a/forge-core/src/main/java/forge/item/ItemPredicate.java b/forge-core/src/main/java/forge/item/ItemPredicate.java index 8111ee845db..d6365e59070 100644 --- a/forge-core/src/main/java/forge/item/ItemPredicate.java +++ b/forge-core/src/main/java/forge/item/ItemPredicate.java @@ -51,7 +51,6 @@ public abstract class ItemPredicate { */ public static class Presets { /** The Item IsPack. */ - @SuppressWarnings("unchecked") public static final Predicate IS_PACK_OR_DECK = Predicates.or(IsBoosterPack, IsFatPack, IsTournamentPack, IsStarterDeck, IsPrebuiltDeck); } } diff --git a/forge-core/src/main/java/forge/item/PaperCard.java b/forge-core/src/main/java/forge/item/PaperCard.java index fd62fdefa34..95f61461b80 100644 --- a/forge-core/src/main/java/forge/item/PaperCard.java +++ b/forge-core/src/main/java/forge/item/PaperCard.java @@ -418,4 +418,10 @@ public class PaperCard implements Comparable, InventoryItemFromSet, public String getSortableName() { return sortableName; } + public boolean isUnRebalanced() { + return StaticData.instance().isRebalanced("A-" + name); + } + public boolean isRebalanced() { + return StaticData.instance().isRebalanced(name); + } } diff --git a/forge-core/src/main/java/forge/item/PaperToken.java b/forge-core/src/main/java/forge/item/PaperToken.java index 88a8a491b96..c190aa7bf00 100644 --- a/forge-core/src/main/java/forge/item/PaperToken.java +++ b/forge-core/src/main/java/forge/item/PaperToken.java @@ -13,6 +13,7 @@ import forge.card.ColorSet; import forge.util.MyRandom; public class PaperToken implements InventoryItemFromSet, IPaperCard { + private static final long serialVersionUID = 1L; private String name; private CardEdition edition; private ArrayList imageFileName = new ArrayList<>(); @@ -200,4 +201,7 @@ public class PaperToken implements InventoryItemFromSet, IPaperCard { public String getImageKey(int artIndex) { return ImageKeys.TOKEN_PREFIX + imageFileName.get(artIndex).replace(" ", "_"); } + public boolean isRebalanced() { + return false; + } } diff --git a/forge-core/src/main/java/forge/item/generation/BoosterGenerator.java b/forge-core/src/main/java/forge/item/generation/BoosterGenerator.java index f7e3eba181c..a0bebbacc47 100644 --- a/forge-core/src/main/java/forge/item/generation/BoosterGenerator.java +++ b/forge-core/src/main/java/forge/item/generation/BoosterGenerator.java @@ -596,6 +596,17 @@ public class BoosterGenerator { Predicate predicateRare = Predicates.and( setPred, IPaperCard.Predicates.Presets.IS_RARE, extraPred); ps.addAll(Iterables.filter(src, predicateRare), 2); + } else if (mainCode.equalsIgnoreCase(BoosterSlots.UNCOMMON_RARE_MYTHIC)) { + // Extended version of RARE_MYTHIC, used for Alchemy slots + + Predicate predicateMythic = Predicates.and( setPred, IPaperCard.Predicates.Presets.IS_MYTHIC_RARE, extraPred); + ps.addAll(Iterables.filter(src, predicateMythic)); + + Predicate predicateRare = Predicates.and( setPred, IPaperCard.Predicates.Presets.IS_RARE, extraPred); + ps.addAll(Iterables.filter(src, predicateRare), 2); + + Predicate predicateUncommon = Predicates.and( setPred, IPaperCard.Predicates.Presets.IS_UNCOMMON, extraPred); + ps.addAll(Iterables.filter(src, predicateUncommon), 4); } else { throw new IllegalArgumentException("Booster generator: operator could not be parsed - " + mainCode); } diff --git a/forge-core/src/main/java/forge/item/generation/BoosterSlots.java b/forge-core/src/main/java/forge/item/generation/BoosterSlots.java index 176580ef77c..07255c46027 100644 --- a/forge-core/src/main/java/forge/item/generation/BoosterSlots.java +++ b/forge-core/src/main/java/forge/item/generation/BoosterSlots.java @@ -6,6 +6,7 @@ public class BoosterSlots { public static final String COMMON = "Common"; public static final String UNCOMMON = "Uncommon"; public static final String UNCOMMON_RARE = "UncommonRare"; + public static final String UNCOMMON_RARE_MYTHIC = "UncommonRareMythic"; public static final String RARE = "Rare"; public static final String RARE_MYTHIC = "RareMythic"; public static final String MYTHIC = "Mythic"; diff --git a/forge-game/src/main/java/forge/game/GameFormat.java b/forge-game/src/main/java/forge/game/GameFormat.java index e546f721cda..225bc651814 100644 --- a/forge-game/src/main/java/forge/game/GameFormat.java +++ b/forge-game/src/main/java/forge/game/GameFormat.java @@ -139,6 +139,13 @@ public class GameFormat implements Comparable { } protected Predicate buildFilter(boolean printed) { Predicate p = Predicates.not(IPaperCard.Predicates.names(this.getBannedCardNames())); + + if (FormatSubType.ARENA.equals(this.getFormatSubType())) { + p = Predicates.and(p, Predicates.not(IPaperCard.Predicates.Presets.IS_UNREBALANCED)); + } else { + p = Predicates.and(p, Predicates.not(IPaperCard.Predicates.Presets.IS_REBALANCED)); + } + if (!this.getAllowedSetCodes().isEmpty()) { p = Predicates.and(p, printed ? IPaperCard.Predicates.printedInSets(this.getAllowedSetCodes(), printed) : diff --git a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java index 530d692c5b3..8c43e1ed456 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java @@ -96,6 +96,13 @@ public class AbilityUtils { final Game game = hostCard.getGame(); Card c = null; + Player player = null; + if (sa instanceof SpellAbility) { + player = ((SpellAbility)sa).getActivatingPlayer(); + } + if (player == null) { + player = hostCard.getController(); + } if (defined.equals("Self")) { c = hostCard; @@ -143,7 +150,7 @@ public class AbilityUtils { } } } else if (defined.equals("TopOfGraveyard")) { - final CardCollectionView grave = hostCard.getController().getCardsIn(ZoneType.Graveyard); + final CardCollectionView grave = player.getCardsIn(ZoneType.Graveyard); if (grave.size() > 0) { c = grave.getLast(); @@ -153,7 +160,7 @@ public class AbilityUtils { } } else if (defined.endsWith("OfLibrary")) { - final CardCollectionView lib = hostCard.getController().getCardsIn(ZoneType.Library); + final CardCollectionView lib = player.getCardsIn(ZoneType.Library); int libSize = lib.size(); if (libSize > 0) { // TopOfLibrary or BottomOfLibrary if (defined.startsWith("TopThird")) { @@ -354,7 +361,7 @@ public class AbilityUtils { candidates = game.getCardsIn(ZoneType.smartValueOf(zone)); validDefined = s[1]; } - cards.addAll(CardLists.getValidCards(candidates, validDefined, hostCard.getController(), hostCard, sa)); + cards.addAll(CardLists.getValidCards(candidates, validDefined, player, hostCard, sa)); return cards; } else if (defined.startsWith("ExiledWith")) { cards.addAll(hostCard.getExiledCards()); @@ -375,7 +382,7 @@ public class AbilityUtils { for (int i = 0; i < valids.length; i++) { valids[i] = "Card." + valids[i]; } - cards = CardLists.getValidCards(cards, valids, hostCard.getController(), hostCard, sa); + cards = CardLists.getValidCards(cards, valids, player, hostCard, sa); } return cards; diff --git a/forge-game/src/main/java/forge/game/ability/effects/PumpAllEffect.java b/forge-game/src/main/java/forge/game/ability/effects/PumpAllEffect.java index 5af4dbc37aa..12e5b52e0a7 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/PumpAllEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/PumpAllEffect.java @@ -115,7 +115,7 @@ public class PumpAllEffect extends SpellAbilityEffect { sb.append(desc); return sb.toString(); - } // pumpAllStackDescription() + } @Override public void resolve(final SpellAbility sa) { diff --git a/forge-game/src/main/java/forge/game/ability/effects/PumpEffect.java b/forge-game/src/main/java/forge/game/ability/effects/PumpEffect.java index 70d9e033171..6a04823abda 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/PumpEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/PumpEffect.java @@ -415,10 +415,7 @@ public class PumpEffect extends SpellAbilityEffect { final ZoneType pumpZone = sa.hasParam("PumpZone") ? ZoneType.smartValueOf(sa.getParam("PumpZone")) : ZoneType.Battlefield; - final int size = tgtCards.size(); - for (int j = 0; j < size; j++) { - final Card tgtC = tgtCards.get(j); - + for (Card tgtC : tgtCards) { // CR 702.26e if (tgtC.isPhasedOut()) { continue; diff --git a/forge-game/src/main/java/forge/game/ability/effects/RepeatEachEffect.java b/forge-game/src/main/java/forge/game/ability/effects/RepeatEachEffect.java index 52488f3005e..d8d19721c2a 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/RepeatEachEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/RepeatEachEffect.java @@ -32,14 +32,6 @@ public class RepeatEachEffect extends SpellAbilityEffect { final SpellAbility repeat = sa.getAdditionalAbility("RepeatSubAbility"); - if (repeat != null && !repeat.getHostCard().equalsWithTimestamp(source)) { - // TODO: for some reason, the host card of the original additional SA is set to the cloned card when - // the ability is copied (e.g. Clone Legion + Swarm Intelligence). Couldn't figure out why this happens, - // so this hack is necessary for now to work around this issue. - System.out.println("Warning: RepeatSubAbility had the wrong host set (potentially after cloning the root SA or changing zones), attempting to correct..."); - repeat.setHostCard(source); - } - final Player player = sa.getActivatingPlayer(); final Game game = player.getGame(); if (sa.hasParam("Optional") && sa.hasParam("OptionPrompt") && //for now, OptionPrompt is needed @@ -74,10 +66,6 @@ public class RepeatEachEffect extends SpellAbilityEffect { } else if (sa.hasParam("DefinedCards")) { repeatCards = AbilityUtils.getDefinedCards(source, sa.getParam("DefinedCards"), sa); - if (sa.hasParam("AdditionalRestriction")) { // lki cards might not be in game - repeatCards = CardLists.getValidCards(repeatCards, - sa.getParam("AdditionalRestriction"), source.getController(), source, sa); - } } boolean loopOverCards = repeatCards != null && !repeatCards.isEmpty(); @@ -125,13 +113,10 @@ public class RepeatEachEffect extends SpellAbilityEffect { // for a mixed list of target permanents and players, e.g. Soulfire Eruption if (sa.hasParam("RepeatTargeted")) { - final List tgts = getTargets(sa); - if (tgts != null) { - for (final Object o : tgts) { - source.addRemembered(o); - AbilityUtils.resolve(repeat); - source.removeRemembered(o); - } + for (final GameObject o : getTargets(sa)) { + source.addRemembered(o); + AbilityUtils.resolve(repeat); + source.removeRemembered(o); } } diff --git a/forge-game/src/main/java/forge/game/ability/effects/RepeatEffect.java b/forge-game/src/main/java/forge/game/ability/effects/RepeatEffect.java index 3438ee5aa8e..4c8465101bf 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/RepeatEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/RepeatEffect.java @@ -26,17 +26,9 @@ public class RepeatEffect extends SpellAbilityEffect { // setup subability to repeat SpellAbility repeat = sa.getAdditionalAbility("RepeatSubAbility"); - if (repeat != null && !repeat.getHostCard().equals(source)) { - // TODO: for some reason, the host card of the original additional SA is set to the cloned card when - // the ability is copied (e.g. Clone Legion + Swarm Intelligence). Couldn't figure out why this happens, - // so this hack is necessary for now to work around this issue. - System.out.println("Warning: RepeatSubAbility had the wrong host set (potentially after cloning the root SA), attempting to correct..."); - repeat.setHostCard(source); - } - Integer maxRepeat = null; if (sa.hasParam("MaxRepeat")) { - maxRepeat = AbilityUtils.calculateAmount(sa.getHostCard(), sa.getParam("MaxRepeat"), sa); + maxRepeat = AbilityUtils.calculateAmount(source, sa.getParam("MaxRepeat"), sa); if (maxRepeat.intValue() == 0) return; // do nothing if maxRepeat is 0. the next loop will execute at least once } @@ -50,7 +42,7 @@ public class RepeatEffect extends SpellAbilityEffect { // Helm of Obedience vs Graveyard to Library replacement effect if (source.getName().equals("Helm of Obedience")) { - StringBuilder infLoop = new StringBuilder(sa.getHostCard().toString()); + StringBuilder infLoop = new StringBuilder(source.toString()); infLoop.append(" - To avoid an infinite loop, this repeat has been broken "); infLoop.append(" and the game will now continue in the current state, ending the loop early. "); infLoop.append("Once Draws are available this probably should change to a Draw."); @@ -84,7 +76,7 @@ public class RepeatEffect extends SpellAbilityEffect { } else { list = game.getCardsIn(ZoneType.Battlefield); } - list = CardLists.getValidCards(list, repeatPresent, sa.getActivatingPlayer(), sa.getHostCard(), sa); + list = CardLists.getValidCards(list, repeatPresent, activator, sa.getHostCard(), sa); final String rightString = repeatCompare.substring(2); int right = AbilityUtils.calculateAmount(sa.getHostCard(), rightString, sa); @@ -114,7 +106,7 @@ public class RepeatEffect extends SpellAbilityEffect { if (sa.hasParam("RepeatOptional")) { Player decider = sa.hasParam("RepeatOptionalDecider") ? AbilityUtils.getDefinedPlayers(sa.getHostCard(), sa.getParam("RepeatOptionalDecider"), sa).get(0) - : sa.getActivatingPlayer(); + : activator; return decider.getController().confirmAction(sa, null, Localizer.getInstance().getMessage("lblDoYouWantRepeatProcessAgain"), null); } diff --git a/forge-gui-mobile/src/forge/adventure/character/MapActor.java b/forge-gui-mobile/src/forge/adventure/character/MapActor.java index 304b8a2d52c..ffe50e1e676 100644 --- a/forge-gui-mobile/src/forge/adventure/character/MapActor.java +++ b/forge-gui-mobile/src/forge/adventure/character/MapActor.java @@ -63,6 +63,7 @@ public class MapActor extends Actor { { ParticleEffect effect = new ParticleEffect(); effect.load(Config.instance().getFile(path),Config.instance().getFile(path).parent()); + effect.setPosition(getCenterX(), getCenterY()); effects.add(new CurrentEffect(path, effect, offset, overlay)); if(duration!=0)//ParticleEffect.setDuration uses an integer for some reason { @@ -147,16 +148,29 @@ public class MapActor extends Actor { effect.effect.draw(batch); } } + float getCenterX() { + float scale = 1f; + if (this instanceof EnemySprite) { + scale = ((EnemySprite) this).getData().scale; + } + return getX()+(getWidth()*scale)/2; + } + float getCenterY() { + float scale = 1f; + if (this instanceof EnemySprite) { + scale = ((EnemySprite) this).getData().scale; + } + return getY()+(getHeight()*scale)/2; + } + @Override public void act(float delta) { super.act(delta); - - for(int i=0;i 13, life > 16 && useGeneticAI); + } return CardUtil.getDeck(deck[Current.player().getEnemyDeckNumber(this.name, deck.length)], true, isFantasyMode, colors, life > 13, life > 16 && useGeneticAI); } } diff --git a/forge-gui-mobile/src/forge/adventure/stage/MapStage.java b/forge-gui-mobile/src/forge/adventure/stage/MapStage.java index 5c61b4fcbf1..e2713511cef 100644 --- a/forge-gui-mobile/src/forge/adventure/stage/MapStage.java +++ b/forge-gui-mobile/src/forge/adventure/stage/MapStage.java @@ -798,9 +798,7 @@ public class MapStage extends GameStage { Current.player().win(); player.setAnimation(CharacterSprite.AnimationTypes.Attack); - float vx = currentMob.getData().scale == 1f ? 0f : -((currentMob.getWidth()*currentMob.getData().scale)/2); - float vy = currentMob.getData().scale == 1f ? 0f : -((currentMob.getHeight()*currentMob.getData().scale)/2); - currentMob.playEffect(Paths.EFFECT_BLOOD, 0.5f, true, new Vector2(vx, vy)); + currentMob.playEffect(Paths.EFFECT_BLOOD, 0.5f); Timer.schedule(new Timer.Task() { @Override public void run() { diff --git a/forge-gui-mobile/src/forge/adventure/stage/WorldStage.java b/forge-gui-mobile/src/forge/adventure/stage/WorldStage.java index ba0e45ddddf..047e4b9804b 100644 --- a/forge-gui-mobile/src/forge/adventure/stage/WorldStage.java +++ b/forge-gui-mobile/src/forge/adventure/stage/WorldStage.java @@ -156,9 +156,7 @@ public class WorldStage extends GameStage implements SaveFileContent { if (playerIsWinner) { Current.player().win(); player.setAnimation(CharacterSprite.AnimationTypes.Attack); - float vx = currentMob.getData().scale == 1f ? 0f : -((currentMob.getWidth()*currentMob.getData().scale)/2); - float vy = currentMob.getData().scale == 1f ? 0f : -((currentMob.getHeight()*currentMob.getData().scale)/2); - currentMob.playEffect(Paths.EFFECT_BLOOD, 0.5f, true, new Vector2(vx, vy)); + currentMob.playEffect(Paths.EFFECT_BLOOD, 0.5f); Timer.schedule(new Timer.Task() { @Override public void run() { diff --git a/forge-gui/res/adventure/Shandalar/custom_cards/nahiris_armory.txt b/forge-gui/res/adventure/Shandalar/custom_cards/nahiris_armory.txt index 4ae7057d5f0..427cf6e821b 100644 --- a/forge-gui/res/adventure/Shandalar/custom_cards/nahiris_armory.txt +++ b/forge-gui/res/adventure/Shandalar/custom_cards/nahiris_armory.txt @@ -3,5 +3,6 @@ ManaCost:no cost Types:Artifact S:Mode$ ReduceCost | ValidCard$ Card | ValidSpell$ Activated.Equip | Activator$ You | Amount$ 1 | EffectZone$ Command | Description$ Equip costs you pay cost {1} less. T:Mode$ AttackersDeclared | ValidAttackers$ Creature.modified+YouCtrl | TriggerZones$ Command | Execute$ TrigConjure | TriggerDescription$ Whenever a modified creature you control attacks, you may pay {M}{M}, if you do conjure a random card from Nahiri's Armory's Spellbook into your hand. -SVar:TrigConjure:AB$ MakeCard | Cost$ PayShards<2> | Conjure$ True | AtRandom$ True | Zone$ Hand | Spellbook$ Stoneforge Mystic,Danitha; Benalia's Hope,Ardenn; Intrepid Archaeologist,Open the Armory,Stone Haven Outfitter,Argentum Armor,Sword of the Animist,Masterwork of Ingenuity,Kaldra Compleat,Armored Skyhunter,Lion Sash,Relic Seeker,Esper Sentinel,Forgeborn Phoenix,Foundry Beetle,Inchblade Companion,Komainu Battle Armor,Luxior; Giada's Gift,Mace of Disruption,Nettlecyst,Shadowspear,Seraphic Greatsword,Soulstealer Axe,Sword of Body and Mind,Sword of Fire and Ice,Junkyard Scrapper,Soulstealer AxeSword of Feast and Famine,Expedition Supplier,Foundry Beetle,Armory Automaton,Bladegraft Aspirant,Dancing Sword,Jor Kadeen; First Goldwarden,Akiri; Fearless Voyager,Acclaimed Contender,Embercleave,Puresteel Paladin,Champion of the Flame,Tiana; Ship's Caretaker,Reyav; Master Smith,Sigarda's Aid,Armored Skyhunter,Bruenor Battlehammer,Halvar; God of Battle,Wyleth; Soul of Steel,Koll; the Forgemaster,Valduk; Keeper of the Flame,Fervent Champion,Cloudsteel Kirin,Leonin Shikari,Balan; Wandering Knight,Kor Duelist,Leonin Abunas,Zamriel; Seraph of Steel,Auriok Steelshaper +SVar:TrigConjure:AB$ MakeCard | Cost$ PayShards<2> | Conjure$ True | AtRandom$ True | Zone$ Hand | Spellbook$ +Stoneforge Mystic,Danitha; Benalia's Hope,Ardenn; Intrepid Archaeologist,Open the Armory,Stone Haven Outfitter,Argentum Armor,Sword of the Animist,Masterwork of Ingenuity,Kaldra Compleat,Armored Skyhunter,Lion Sash,Relic Seeker,Esper Sentinel,Forgeborn Phoenix,Foundry Beetle,Inchblade Companion,Komainu Battle Armor,Luxior; Giada's Gift,Mace of Disruption,Nettlecyst,Shadowspear,Seraphic Greatsword,Soulstealer Axe,Sword of Body and Mind,Sword of Fire and Ice,Junkyard Scrapper,Soulstealer Axe,Sword of Feast and Famine,Expedition Supplier,Foundry Beetle,Armory Automaton,Bladegraft Aspirant,Dancing Sword,Jor Kadeen; First Goldwarden,Akiri; Fearless Voyager,Acclaimed Contender,Embercleave,Puresteel Paladin,Champion of the Flame,Tiana; Ship's Caretaker,Reyav; Master Smith,Sigarda's Aid,Armored Skyhunter,Bruenor Battlehammer,Halvar; God of Battle,Wyleth; Soul of Steel,Koll; the Forgemaster,Valduk; Keeper of the Flame,Fervent Champion,Cloudsteel Kirin,Leonin Shikari,Balan; Wandering Knight,Kor Duelist,Leonin Abunas,Zamriel; Seraph of Steel,Auriok Steelshaper Oracle:Equip costs you pay cost {1} less.\nWhenever a modified creature you control attacks, you may pay {M}{M}, if you do conjure a random card from Nahiri's Armory's Spellbook into your hand. \ No newline at end of file diff --git a/forge-gui/res/adventure/Shandalar/custom_cards/nahiris_boss_effect.txt b/forge-gui/res/adventure/Shandalar/custom_cards/nahiris_boss_effect.txt index 41d868a7d31..215a2628956 100644 --- a/forge-gui/res/adventure/Shandalar/custom_cards/nahiris_boss_effect.txt +++ b/forge-gui/res/adventure/Shandalar/custom_cards/nahiris_boss_effect.txt @@ -4,7 +4,7 @@ Types:Enchantment S:Mode$ ReduceCost | ValidCard$ Card | ValidSpell$ Activated.Equip | Activator$ You | Amount$ 1 | EffectZone$ Command | Description$ Equip costs you pay cost {1} less. T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Command | Secondary$ True | Execute $ TrigConjure | TriggerDescription$ At the beginning of your upkeep or when an equipped creature you control attacks, conjure a card from Nahiri's Spellbook into your hand. T:Mode$ Attacks | ValidCard$ Creature.YouCtrl+equipped | TriggerZones$ Command | Execute$ TrigConjure | TriggerDescription$ At the beginning of your upkeep or when an equipped creature you control attacks, conjure a card from Nahiri's Spellbook into your hand. -SVar:TrigConjure:DB$ MakeCard | Zone$ Hand | Conjure$ True | AtRandom$ True | Spellbook$ Stoneforge Mystic,Danitha; Benalia's Hope,Ardenn, Intrepid Archaeologist,Open the Armory,Stone Haven Outfitter,Argentum Armor,Sword of the Animist,Masterwork of Ingenuity,Kaldra Compleat,Armored Skyhunter,Lion Sash,Relic Seeker,Esper Sentinel,Forgeborn Phoenix,Foundry Beetle,Inchblade Companion,Komainu Battle Armor,Luxior;Giada's Gift,Mace of Disruption,Nettlecyst,Shadowspear,Seraphic Greatsword,Soulstealer Axe,Sword of Body and Mind,Sword of Fire and Ice,Junkyard Scrapper,Soulstealer Axe,Sword of Feast and Famine,Expedition Supplier,Foundry Beetle,Armory Automaton,Bladegraft Aspirant,Dancing Sword,Jor Kadeen; First Goldwarden,Akiri; Fearless Voyager,Acclaimed Contender,Embercleave,Puresteel Paladin,Champion of the Flame,Tiana; Ship's Caretaker,Reyav; Master Smith,Sigarda's Aid,Armored Skyhunter,Bruenor Battlehammer,Halvar; God of Battle,Wyleth; Soul of Steel,Koll; the Forgemaster,Valduk; Keeper of the Flame,Fervent Champion,Cloudsteel Kirin,Leonin Shikari,Balan, Wandering Knight,Kor Duelist,Leonin Abunas,Zamriel, Seraph of Steel,Auriok Steelshaper +SVar:TrigConjure:DB$ MakeCard | Zone$ Hand | Conjure$ True | AtRandom$ True | Spellbook$ Stoneforge Mystic,Danitha; Benalia's Hope,Ardenn, Intrepid Archaeologist,Open the Armory,Stone Haven Outfitter,Argentum Armor,Sword of the Animist,Masterwork of Ingenuity,Kaldra Compleat,Armored Skyhunter,Lion Sash,Relic Seeker,Esper Sentinel,Forgeborn Phoenix,Foundry Beetle,Inchblade Companion,Komainu Battle Armor,Luxior;Giada's Gift,Mace of Disruption,Nettlecyst,Shadowspear,Seraphic Greatsword,Soulstealer Axe,Sword of Body and Mind,Sword of Fire and Ice,Junkyard Scrapper,Soulstealer Axe,Sword of Feast and Famine,Expedition Supplier,Foundry Beetle,Armory Automaton,Bladegraft Aspirant,Dancing Sword,Jor Kadeen; First Goldwarden,Akiri; Fearless Voyager,Acclaimed Contender,Embercleave,Puresteel Paladin,Champion of the Flame,Tiana; Ship's Caretaker,Reyav; Master Smith,Sigarda's Aid,Armored Skyhunter,Bruenor Battlehammer,Halvar; God of Battle,Wyleth; Soul of Steel,Koll; the Forgemaster,Valduk; Keeper of the Flame,Fervent Champion,Cloudsteel Kirin,Leonin Shikari,Balan; Wandering Knight,Kor Duelist,Leonin Abunas,Zamriel;Seraph of Steel,Auriok Steelshaper T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Command | Execute$ TrigToken | TriggerDescription$ At the beginning of your end step, create a 1/1 white Kor Soldier creature token SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ w_1_1_kor_soldier Oracle:Equip costs you pay cost {1} less.\nAt the beginning of your upkeep or whenever an equipped creature you control attacks, conjure a card from Nahiri's Spellbook into your hand\nAt the beginning of your end step, create a 1/1 white Kor Soldier creature token. \ No newline at end of file diff --git a/forge-gui/res/adventure/Shandalar/decks/challenger_20_allied_fires.dck b/forge-gui/res/adventure/Shandalar/decks/challenger_20_allied_fires.dck new file mode 100644 index 00000000000..a00f6b581ef --- /dev/null +++ b/forge-gui/res/adventure/Shandalar/decks/challenger_20_allied_fires.dck @@ -0,0 +1,29 @@ +[metadata] +Name=challenger_20_allied_fires +[Main] +2 Banishing Light|SCD|1 +3 Deafening Clarion|GRN|1 +2 Drawn from Dreams|NCC|1 +2 Fae of Wishes|ELD|1 +4 Fires of Invention|ELD|1 +4 Interplanar Beacon|WAR|1 +5 Island|MID|1 +3 Kasmina, Enigmatic Mentor|WAR|1 +1 Kenrith, the Returned King|ELD|1 +2 Mountain|MID|1 +4 Narset, Parter of Veils|SLD|1 +4 Omen of the Sea|J21|1 +2 Plains|MID|1 +2 Saheeli, Sublime Artificer|SLD|1 +3 Sarkhan the Masterless|SLD|1 +1 Steam Vents|GRN|1 +3 Swiftwater Cliffs|NEO|1 +1 Temple of Enlightenment|VOC|1 +1 Temple of Epiphany|NCC|1 +1 Temple of Triumph|NCC|1 +2 Time Wipe|DMC|1 +3 Tranquil Cove|NEO|1 +1 Ugin, the Ineffable|WAR|1 +4 Wind-Scarred Crag|NEO|1 +[Sideboard] + diff --git a/forge-gui/res/adventure/Shandalar/decks/challenger_20_cavalcade_charge.dck b/forge-gui/res/adventure/Shandalar/decks/challenger_20_cavalcade_charge.dck new file mode 100644 index 00000000000..10fb8f53b9a --- /dev/null +++ b/forge-gui/res/adventure/Shandalar/decks/challenger_20_cavalcade_charge.dck @@ -0,0 +1,18 @@ +[metadata] +Name=challenger_20_cavalcade_charge +[Main] +4 Bonecrusher Giant|ELD|1 +3 Castle Embereth|ELD|1 +4 Cavalcade of Calamity|RNA|1 +3 Chandra, Acolyte of Flame|M20|1 +1 Embercleave|ELD|1 +4 Fervent Champion|ELD|1 +4 Light Up the Stage|PLIST|1 +18 Mountain|ELD|1 +4 Rimrock Knight|ELD|1 +4 Runaway Steam-Kin|GRN|1 +4 Scorch Spitter|M20|1 +3 Tin Street Dodger|RNA|1 +4 Torbran, Thane of Red Fell|ELD|1 +[Sideboard] + diff --git a/forge-gui/res/adventure/Shandalar/decks/challenger_20_final_adventure.dck b/forge-gui/res/adventure/Shandalar/decks/challenger_20_final_adventure.dck new file mode 100644 index 00000000000..a8956bb50ac --- /dev/null +++ b/forge-gui/res/adventure/Shandalar/decks/challenger_20_final_adventure.dck @@ -0,0 +1,24 @@ +[metadata] +Name=challenger_20_final_adventure +[Main] +2 Blacklance Paragon|ELD|1 +2 Castle Locthwain|ELD|1 +2 Disfigure|BRO|1 +4 Edgewall Innkeeper|ELD|1 +1 Fabled Passage|ELD|1 +2 Find // Finality|C20|1 +7 Forest|ELD|1 +4 Foulmire Knight|ELD|1 +3 Jungle Hollow|IKO|1 +2 Knight of the Ebon Legion|M20|1 +4 Lovestruck Beast|ELD|1 +4 Lucky Clover|ELD|1 +2 Midnight Reaper|SLD|1 +2 Murderous Rider|ELD|1 +4 Order of Midnight|ELD|1 +4 Smitten Swordmaster|ELD|1 +8 Swamp|ELD|1 +2 Temple of Malady|M21|1 +1 Vraska, Golgari Queen|GRN|1 +[Sideboard] + diff --git a/forge-gui/res/adventure/Shandalar/decks/challenger_20_flash_of_ferocity.dck b/forge-gui/res/adventure/Shandalar/decks/challenger_20_flash_of_ferocity.dck new file mode 100644 index 00000000000..50e1e7f2681 --- /dev/null +++ b/forge-gui/res/adventure/Shandalar/decks/challenger_20_flash_of_ferocity.dck @@ -0,0 +1,23 @@ +[metadata] +Name=challenger_20_flash_of_ferocity +[Main] +1 Brazen Borrower|ELD|1 +4 Brineborn Cutthroat|M20|1 +2 Castle Vantress|ELD|1 +1 Fabled Passage|ELD|1 +8 Forest|M20|1 +4 Frilled Mystic|RNA|1 +8 Island|M20|1 +4 Nightpack Ambusher|M20|1 +4 Opt|ELD|1 +4 Quench|RNA|1 +2 Sinister Sabotage|SCD|1 +4 Spectral Sailor|M20|1 +2 Temple of Mystery|M20|1 +2 Thassa's Intervention|THB|1 +3 Thornwood Falls|M20|1 +2 Unsummon|M20|1 +1 Wavebreak Hippocamp|THB|1 +4 Wildborn Preserver|ELD|1 +[Sideboard] + diff --git a/forge-gui/res/adventure/Shandalar/decks/challenger_21_azorius_control.dck b/forge-gui/res/adventure/Shandalar/decks/challenger_21_azorius_control.dck new file mode 100644 index 00000000000..75fa1bc0e72 --- /dev/null +++ b/forge-gui/res/adventure/Shandalar/decks/challenger_21_azorius_control.dck @@ -0,0 +1,26 @@ +[metadata] +Name=Challenger_21_Azorius_Control +[Main] +2 Archon of Sun's Grace|J22|1 +2 Banishing Light|KHC|1 +2 Behold the Multiverse|KHM|1 +1 Doomskar|KHM|1 +2 Dream Trawler|THB|1 +3 Elspeth Conquers Death|THB|1 +1 Emeria's Call|ZNR|1 +2 Glass Casket|J21|1 +8 Island|KHM|1 +1 Negate|STA|1 +3 Neutralize|J21|1 +4 Omen of the Sea|J21|1 +8 Plains|KHM|1 +1 Saw It Coming|KHM|1 +1 Shark Typhoon|SLC|1 +2 Shatter the Sky|THB|1 +2 Skyclave Cleric|ZNR|1 +4 Temple of Enlightenment|VOC|1 +4 The Birth of Meletis|THB|1 +3 Thirst for Meaning|THB|1 +4 Tranquil Cove|KHC|1 +[Sideboard] + diff --git a/forge-gui/res/adventure/Shandalar/decks/challenger_21_dimir_rogue.dck b/forge-gui/res/adventure/Shandalar/decks/challenger_21_dimir_rogue.dck new file mode 100644 index 00000000000..38791f6d723 --- /dev/null +++ b/forge-gui/res/adventure/Shandalar/decks/challenger_21_dimir_rogue.dck @@ -0,0 +1,22 @@ +[metadata] +Name=Challenger_21_Dimir_Rogue +[Main] +2 Blackbloom Rogue|ZNR|1 +2 Bloodchief's Thirst|ZNR|1 +4 Dismal Backwater|MB1|1 +4 Drown in the Loch|ELD|1 +2 Eliminate|M21|1 +2 Heartless Act|IKO|1 +8 Island|ELD|1 +1 Malakir Rebirth|ZNR|1 +4 Merfolk Windrobber|ZNR|1 +3 Nighthawk Scavenger|ZNR|1 +1 Rankle, Master of Pranks|ELD|1 +4 Soaring Thought-Thief|ZNR|1 +9 Swamp|ELD|1 +4 Temple of Deceit|THB|1 +4 Thieves' Guild Enforcer|M21|1 +3 Vantress Gargoyle|ELD|1 +3 Zareth San, the Trickster|ZNR|1 +[Sideboard] + diff --git a/forge-gui/res/adventure/Shandalar/decks/challenger_21_mono-green_stompy.dck b/forge-gui/res/adventure/Shandalar/decks/challenger_21_mono-green_stompy.dck new file mode 100644 index 00000000000..b7a9cc062f1 --- /dev/null +++ b/forge-gui/res/adventure/Shandalar/decks/challenger_21_mono-green_stompy.dck @@ -0,0 +1,22 @@ +[metadata] +Name=challenger_21_mono-green_stompy +[Main] +19 Forest|ELD|1 +1 Garruk, Unleashed|M21|1 +2 Gemrazer|IKO|1 +3 Kazandu Mammoth|ZNR|1 +4 Lovestruck Beast|ELD|1 +3 Primal Might|M21|1 +4 Ram Through|IKO|1 +2 Scavenging Ooze|NCC|1 +2 Snakeskin Veil|KHM|1 +2 Stonecoil Serpent|ELD|1 +3 Swarm Shambler|ZNR|1 +2 Syr Faren, the Hengehammer|ELD|1 +3 Thrashing Brontodon|M21|1 +2 Turntimber Symbiosis|ZNR|1 +2 Wildborn Preserver|ELD|1 +4 Wildwood Tracker|ELD|1 +2 Yorvo, Lord of Garenbrig|ELD|1 +[Sideboard] + diff --git a/forge-gui/res/adventure/Shandalar/decks/challenger_21_mono-red_aggro.dck b/forge-gui/res/adventure/Shandalar/decks/challenger_21_mono-red_aggro.dck new file mode 100644 index 00000000000..b5a4fb136a6 --- /dev/null +++ b/forge-gui/res/adventure/Shandalar/decks/challenger_21_mono-red_aggro.dck @@ -0,0 +1,19 @@ +[metadata] +Name=challenger_21_mono-red_aggro +[Main] +4 Akoum Hellhound|ZNR|1 +4 Anax, Hardened in the Forge|PLIST|1 +4 Bonecrusher Giant|PLIST|1 +2 Castle Embereth|NCC|1 +1 Embercleave|ELD|1 +4 Fervent Champion|ELD|1 +4 Kargan Intimidator|ZNR|1 +16 Mountain|ZNR|1 +4 Rimrock Knight|ELD|1 +4 Roil Eruption|ZNR|1 +2 Shatterskull Smashing|ZNR|1 +4 Shock|STA|1 +4 Spikefield Hazard|ZNR|1 +3 Torbran, Thane of Red Fell|ELD|1 +[Sideboard] + diff --git a/forge-gui/res/adventure/Shandalar/decks/challenger_22_dimir_control.dck b/forge-gui/res/adventure/Shandalar/decks/challenger_22_dimir_control.dck new file mode 100644 index 00000000000..5f0d4cedd42 --- /dev/null +++ b/forge-gui/res/adventure/Shandalar/decks/challenger_22_dimir_control.dck @@ -0,0 +1,27 @@ +[metadata] +Name=AI 22 Dimir Control +[Main] +2 Baleful Mastery|STX|1 +3 Blood on the Snow|KHM|1 +3 Crippling Fear|CLB|1 +2 Evolving Wilds|MID|1 +2 Field of Ruin|MID|1 +3 Graveyard Trespasser|MID|1 +2 Hall of Storm Giants|AFR|1 +2 Hero's Downfall|VOW|1 +1 Hullbreaker Horror|VOW|1 +4 Ice Tunnel|KHM|1 +1 Infernal Grasp|DBL|1 +2 Iymrith, Desert Doom|AFR|1 +2 Jwari Disruption|ZNR|1 +1 March of Wretched Sorrow|NEO|1 +4 Memory Deluge|MID|1 +2 Parasitic Grasp|VOW|1 +3 Power Word Kill|GDY|1 +3 Saw It Coming|KHM|1 +4 Shipwreck Marsh|MID|1 +5 Snow-Covered Island|J22|1 +7 Snow-Covered Swamp|KHM|1 +2 Thirst for Discovery|VOW|1 +[Sideboard] + diff --git a/forge-gui/res/adventure/Shandalar/decks/challenger_22_gruul_stompy.dck b/forge-gui/res/adventure/Shandalar/decks/challenger_22_gruul_stompy.dck new file mode 100644 index 00000000000..1145707cc7c --- /dev/null +++ b/forge-gui/res/adventure/Shandalar/decks/challenger_22_gruul_stompy.dck @@ -0,0 +1,27 @@ +[metadata] +Name=AI 22 Gruul Stompy +[Main] +4 Abrade|SCD|1 +4 Briarbridge Tracker|DBL|1 +4 Forest|MID|1 +3 Forest|MID|2 +3 Forest|MID|3 +1 Goldspan Dragon|KHM|1 +2 Halana and Alena, Partners|DBL|1 +4 Jaspera Sentinel|KHM|1 +2 Lair of the Hydra|AFR|1 +1 Light Up the Night|DBL|1 +4 Magda, Brazen Outlaw|KHM|1 +4 Mountain|MID|1 +2 Mountain|MID|2 +2 Mountain|MID|3 +4 Ranger Class|AFR|1 +4 Rockfall Vale|DBL|1 +4 Snakeskin Veil|KHM|1 +1 Thundering Rebuke|ZNR|1 +2 Tovolar's Huntmaster|DBL|1 +1 Tovolar, Dire Overlord|DBL|1 +2 Twinshot Sniper|NEO|1 +2 Ulvenwald Oddity|DBL|1 +[Sideboard] + diff --git a/forge-gui/res/adventure/Shandalar/decks/challenger_22_mono_white_aggro.dck b/forge-gui/res/adventure/Shandalar/decks/challenger_22_mono_white_aggro.dck new file mode 100644 index 00000000000..8d79435b531 --- /dev/null +++ b/forge-gui/res/adventure/Shandalar/decks/challenger_22_mono_white_aggro.dck @@ -0,0 +1,20 @@ +[metadata] +Name=AI 22 Mono White Aggro +[Main] +4 Clarion Spirit|KHM|1 +4 Codespell Cleric|J21|1 +3 Elite Spellbinder|SLC|1 +3 Faceless Haven|PPRO|1 +2 Fateful Absence|MID|1 +1 Intrepid Adversary|DBL|1 +2 Kabira Takedown|ZNR|1 +4 Luminarch Aspirant|NCC|1 +4 Monk of the Open Hand|AFR|1 +3 Paladin Class|AFR|1 +2 Reidane, God of the Worthy|KHM|1 +2 Skyclave Apparition|ZNR|1 +20 Snow-Covered Plains|KHM|1 +2 Thalia, Guardian of Thraben|DKA|1 +4 Usher of the Fallen|KHM|1 +[Sideboard] + diff --git a/forge-gui/res/adventure/Shandalar/decks/challenger_22_rakdos_vampires.dck b/forge-gui/res/adventure/Shandalar/decks/challenger_22_rakdos_vampires.dck new file mode 100644 index 00000000000..4fbe0c6fb1e --- /dev/null +++ b/forge-gui/res/adventure/Shandalar/decks/challenger_22_rakdos_vampires.dck @@ -0,0 +1,29 @@ +[metadata] +Name=AI 22 Rakdos Vampires +[Main] +2 Blightstep Pathway|KHM|1 +4 Bloodfell Caves|SCD|1 +4 Bloodtithe Harvester|VOW|1 +2 Den of the Bugbear|AFR|1 +2 Dominating Vampire|DBL|1 +2 Florian, Voldaren Scion|DBL|1 +1 Henrika Domnathi|DBL|1 +4 Immersturm Predator|KHM|1 +2 Infernal Grasp|DBL|1 +1 Mountain|VOW|1 +2 Mountain|VOW|2 +3 Mountain|VOW|4 +2 Mukotai Soulripper|NEO|1 +2 Oni-Cult Anvil|BRC|1 +2 Sokenzan Smelter|NEO|1 +5 Swamp|VOW|1 +1 Swamp|VOW|2 +1 Swamp|VOW|4 +2 Vampire Socialite|MID|1 +1 Village Rites|J22|1 +4 Voldaren Bloodcaster|VOW|1 +4 Voldaren Epicure|VOW|1 +3 Voldaren Estate|DBL|1 +4 Voltage Surge|NEO|1 +[Sideboard] + diff --git a/forge-gui/res/adventure/Shandalar/maps/map/kiora_island.tmx b/forge-gui/res/adventure/Shandalar/maps/map/kiora_island.tmx index e41245ea372..c3877982c4f 100644 --- a/forge-gui/res/adventure/Shandalar/maps/map/kiora_island.tmx +++ b/forge-gui/res/adventure/Shandalar/maps/map/kiora_island.tmx @@ -7,12 +7,12 @@ - eJy9lb9OwzAQhw+J2kUQBiQegwHRgVeAp6mgLEwdgYmpa2f+SOQN8gDMwNhn4AUQd4p/snOxHUdFnPSpapK7z+ezkn1LdMBUzCFT/xNPzDPzwrwW5twYovs9ogfmjrk2472rCdFnhFxOLP7aG/4viW29OYa84bNL21KyZ+hPZjjkOVY1Ul59bnNe+RV36v6YfvW5TeUiX9dJcbLj895s33sxJbqcdr2xvUr5Uvfg1dfD+V6Zfr9yvoTG7ePCdPM3fP3H5Syq7nyxbtRcRvqNnStZ65o8X5O21ofyxuaa6zEk551bzznnn1beJV64hSMb3/d34/tduTWsKe/93u32DWqXK7Vmpn1+pt6NG1dnbr0LdWP9l8SZOg+Yp36fwofaj2oG8kxD5V4d4r2t/HwRtfJiz/X3bhtvGHCH/cAphN+7Mfs85A0DXsy5of4shF8B8frL + eJy9lTtOxDAQhgeJtRdBKJA4BgViC64Ap1nB0lBtCVRU227NQyI3yAGogXLPwAUQM4p/2ZnYjqNFjPQriu2Zz/NQsm+JDlgV65BV/5OeWM+sF9Zroc+NIbrfI3pg3bGuzXjuakL0GVHOJ2Z/zQ3fS2xbbk5D3PDs0rYqqRnykx4OcY5VjBRXz22OK09hp/bH5KvnNuULfx0npZMd7/dm+9yLKdHltMuN1SrFS+2Bq9fD/l6Zfr4yX6LG1XFhuv4bXv9xPouq21/cGzGXkXxjcyV3XZPX16SN9aG4sb7mcgyV486t1zn7n1aeJVyw5fyRjdf93fh8V+4Oa8pzv3e7eUO185VYM9Oen6lv48bFmVvPQtxY/iV2puYB/dTfU/AQ+9H2Z7Khcq424d5Wvr+wWnFRc/2/24YbGthhPmCKwv/dmDoPcUMDF31uqN8L0S8+a/oe - eJytlL9OwzAQxq8tidNMFMRaGACxABJi4BE6ULpXwFPACyAUmBgrAc8AiDdAwBqJAcTKDO+AuE+OZcdxwDE96VMT1+ffxfdnElGQXc0QLbWJFtvN/LYK3iSQe9HVamIvAdyjmOg4LjOVNlKizdT/LJO7mxA9WPcG1h6vX/O9Zl0tFxt68/yO7ViyIOQrM3xfI/n+lZSZ0+AuiPJ5PaH/mxVVns0e0HS4tp+Ljdjmhft7fev7Ly5sJyrrW8i843m/Q3TA6rNOW0QnrDtRPeM37lrqd0+oaewfJrLmoDHX3a3wY8JwX2Aj5sOOXMs45jPWeau6/z2S+5WQ30ERf8+TCUMfrVvnL3OOVlirjlzZXMQ7J6SaGLifls8j855YzzU10g9k2VzkRhnmri3T0O9jay3ERomu4/uafr0Rko+ZhV7Jix66/Adf1TNqc+SYS64ZlRu9CzZ6Cgrhmvog/aueTeXWzFD7fHuojmsybS7ec4cP+E24P6PWfGc= + eJytlMsuBEEUhs9ceqqnV4bYYoHYIBELjzALzF7wFLyASLOynATPgHgDwbYTC2JrzTuI86e60tWnq011ZU7yp29V9Z0+t3FEQXbTJVpqEy22m+3bynnjQO5Vv1ATewvgnvSITntlptFGQrSZ+J9lc3djoicRN7D2+f0txzXtF3KxoQ/P/9juaRaEfKXW3vdIP//EZeY0uPOqfN5AFd9mVJUn2UOaDlfuc7Hh25xy/69vfU/iwnaisn6VzjvuDztER6wF1nmL6Iz1oKpn/MddS/zihJrG+r1Y1xx0wHV3r/yYMMQLbPh83NHvUvb5gnXZqq7/jPR6I+R3mPs/8GTC0Efr4vxlztEKa9WRK8mFv7NKq4mB+y32PDPvhfVaUyPwM4QluciNMcxdKdvQ7zI+ITaKizp+rOnXO6X5mFnolSzvoevu5PPrzNQzanPkmEuuGZVZvQs2egoK4dr6ouJq7m1lYmaYdb49VMe1mZKL58yxB/wm3D9fB3xE @@ -20,7 +20,7 @@ - eJxjYGBgKOdloBuooJNdn1hoZ3YVHj9MYCXOjIXM5NtDSXzZI4VLCdScSizmVdMxTcAANn89YyDNLcSqhakrGQB/4gOv2MnXixx+rESkL3R7saUDUsFiPPZSK6yxhZEjEfmdXmUPDFASl5SYQy170QEbN4SmZ31BbH7GVyajA0rSIS6/w8SfUWAmstmkhDE56RoAwkMY7Q== + eJxjYGBgKOdloBuooJNdn1hoZ3YVHj9MYCXOjIXM5NtDSXzZI4VLCdScSizmVdMxTcAANn89YyDNLcSqhakrGQB/4gOv2MnXixx+rESkL3R7saUDUsFiPPZSK6yxhZEjEfmdXmUPDGBzpy4jdcwhRz05diMDNm4ITc/6gtj8jK9MRgeUpENcfoeJP6PATGSzSQljctI1AJToGUk= diff --git a/forge-gui/res/adventure/Shandalar/maps/map/main_story/forest_capital.tmx b/forge-gui/res/adventure/Shandalar/maps/map/main_story/forest_capital.tmx index 821cf84d3a2..61e233104ff 100644 --- a/forge-gui/res/adventure/Shandalar/maps/map/main_story/forest_capital.tmx +++ b/forge-gui/res/adventure/Shandalar/maps/map/main_story/forest_capital.tmx @@ -148,6 +148,9 @@ "Bear", "Centaur", "Centaur Warrior", + "Challenger 20", + "Challenger 21", + "Challenger 22", "Dino", "Eldraine Faerie", "Elf", diff --git a/forge-gui/res/adventure/Shandalar/maps/map/main_story/island_capital.tmx b/forge-gui/res/adventure/Shandalar/maps/map/main_story/island_capital.tmx index 638e4bc681f..d2305cd13b4 100644 --- a/forge-gui/res/adventure/Shandalar/maps/map/main_story/island_capital.tmx +++ b/forge-gui/res/adventure/Shandalar/maps/map/main_story/island_capital.tmx @@ -131,6 +131,9 @@ "enemyPool":[ "Bird", + "Challenger 20", + "Challenger 21", + "Challenger 22", "Djinn", "Elemental", "Merfolk", diff --git a/forge-gui/res/adventure/Shandalar/maps/map/main_story/mountain_capital.tmx b/forge-gui/res/adventure/Shandalar/maps/map/main_story/mountain_capital.tmx index e2cfb1fb07a..8874d15a4a1 100644 --- a/forge-gui/res/adventure/Shandalar/maps/map/main_story/mountain_capital.tmx +++ b/forge-gui/res/adventure/Shandalar/maps/map/main_story/mountain_capital.tmx @@ -124,6 +124,10 @@ "Axgard Dwarf", "Berserker", "Boggart", + "Challenger 1", + "Challenger 2", + "Challenger 3", + "Challenger 4", "Cyclops", "Devil", "Dinosaur", diff --git a/forge-gui/res/adventure/Shandalar/maps/map/main_story/plains_capital.tmx b/forge-gui/res/adventure/Shandalar/maps/map/main_story/plains_capital.tmx index 24640aaae3a..dcf6c657a33 100644 --- a/forge-gui/res/adventure/Shandalar/maps/map/main_story/plains_capital.tmx +++ b/forge-gui/res/adventure/Shandalar/maps/map/main_story/plains_capital.tmx @@ -132,6 +132,9 @@ "Archer", "Cat", "Cathar", + "Challenger 20", + "Challenger 21", + "Challenger 22", "Cleric", "Dawnhart Witch", "Eldraine Knight", diff --git a/forge-gui/res/adventure/Shandalar/maps/map/main_story/swamp_capital.tmx b/forge-gui/res/adventure/Shandalar/maps/map/main_story/swamp_capital.tmx index 9d9df53923f..189e522e957 100644 --- a/forge-gui/res/adventure/Shandalar/maps/map/main_story/swamp_capital.tmx +++ b/forge-gui/res/adventure/Shandalar/maps/map/main_story/swamp_capital.tmx @@ -60,6 +60,9 @@ "Black Wiz1", "Black Wiz2", "Black Wiz3", + "Challenger 20", + "Challenger 21", + "Challenger 22", "Dark Knight", "Death Knight", "Demon", diff --git a/forge-gui/res/adventure/Shandalar/maps/map/main_story/templeofchandra.tmx b/forge-gui/res/adventure/Shandalar/maps/map/main_story/templeofchandra.tmx index ac810a5bf50..ec32f373d84 100644 --- a/forge-gui/res/adventure/Shandalar/maps/map/main_story/templeofchandra.tmx +++ b/forge-gui/res/adventure/Shandalar/maps/map/main_story/templeofchandra.tmx @@ -1,5 +1,5 @@ - + { @@ -708,7 +708,7 @@ { - "startBattleWithCardInCommandZone": [ "Chandra, Supreme Pyromancer" ] + "startBattleWithCardInCommandZone": [ "Fire of Kaladesh" ] } @@ -782,7 +782,7 @@ - [ + [ { "type": "item", "probability": 0.01, @@ -832,9 +832,7 @@ "startBattleWithCard": [ "Lightning Coils" ] } - - - [ + [ { "type": "item", "probability": 0.01, @@ -843,6 +841,8 @@ } ] + + @@ -1511,6 +1511,26 @@ + + + { + "startBattleWithCardInCommandZone": [ "Chandra, Supreme Pyromancer" ] +} + + + [ + { + "type": "item", + "probability": 0.01, + "count": 1, + "itemName": "Phoenix Charm" + } +] + + + + + diff --git a/forge-gui/res/adventure/Shandalar/maps/map/main_story/templeofliliana.tmx b/forge-gui/res/adventure/Shandalar/maps/map/main_story/templeofliliana.tmx new file mode 100644 index 00000000000..d51555302a8 --- /dev/null +++ b/forge-gui/res/adventure/Shandalar/maps/map/main_story/templeofliliana.tmx @@ -0,0 +1,328 @@ + + + + + { + "startBattleWithCard": [ "Hall of Flame" ], +} + + + + + + + +4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107, +4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107, +4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107, +4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107,4107, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,240,240,240,240,240,240,240,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,240,240,240,240,240,240,240,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,240,240,240,240,240,240,240,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,1352,1352,1824,240,1823,1826,1826,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,1984,1984,1985,240,1983,1984,1984,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,1984,1984,1985,240,1983,1984,1984,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,1984,1984,1985,240,1983,1984,1984,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,1984,1984,1985,240,1983,1984,1984,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2142,2142,1982,240,1981,2142,2142,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,240,240,240,240,240,240,240,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,240,240,240,240,240,240,240,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,6488,6489,6489,6489,6489,6490,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,6646,6647,6647,6647,6647,6648,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,6646,6647,6647,6647,6647,6648,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,6646,6647,6647,6647,6647,6648,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,6646,6647,6647,6647,6647,6648,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,6804,6805,6805,6805,6805,6806,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904, +2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904,2904 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2946,2946,2946,2946,2946,2946,2946,2946,2471,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2946,2946,2946,2946,2946,2946,2946,2946,2471,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2314,2315,2946,2946,2946,2946,2313,2314,3105,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,2473,2946,2946,2946,2946,2471,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3103,2315,2946,2946,2313,3105,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,2945,2946,2946,2471,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,3103,2315,2313,3105,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,2945,2947,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,3103,3105,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4355,4355,4355,4355,4355,4355,4355,4037,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4193,4194,4194,4194,4194,4194,4194,4194,4195,0,6014,5857,5857,6015,6014,5857,5857,6015,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4193,4194,4194,4194,4194,4194,4194,4194,4195,0,5700,5387,0,0,0,0,5544,5698,0,0,0,0,0,0,605,448,448,607,0,605,606,606,607,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4355,4355,4355,4355,4355,4355,4356,4194,4194,4194,4194,4194,4194,4038,4353,0,5700,7756,0,0,0,0,5544,5698,0,0,0,605,607,0,291,764,764,289,0,291,764,764,765,0,605,607, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4193,4194,4194,4194,4194,4194,4194,3568,4194,4194,4194,4194,4194,4194,4196,0,0,5700,5387,0,0,0,0,5544,5698,0,0,0,921,1074,606,449,764,764,447,606,449,764,764,447,606,1078,923, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4193,4194,4194,4194,4194,4194,4194,3568,4194,4194,4194,4194,4194,4038,4353,0,0,5700,5230,0,0,0,0,5544,5698,0,0,0,0,291,764,764,764,764,764,764,764,764,764,764,764,765,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4193,4194,4194,4194,4194,4194,4194,3568,4194,4194,4194,4194,4194,4195,0,0,0,5700,7755,0,5869,0,0,0,5698,0,0,0,0,291,764,764,764,764,764,764,764,764,764,764,764,765,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4193,4194,4194,4194,4194,4194,4194,3568,3568,4194,4194,4194,4038,4353,0,0,0,5700,0,0,0,0,0,0,5698,0,0,0,0,291,764,764,764,764,764,764,764,764,764,764,764,765,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4193,4194,4194,4194,4194,4194,4194,4194,4194,4194,4194,4194,4196,0,0,0,0,6172,5541,5541,5541,5541,5541,5541,6173,0,0,0,0,763,764,764,764,764,764,764,764,764,764,764,764,765,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4193,4194,4194,4194,4194,4194,4194,4194,4194,4194,4194,4194,4196,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,921,922,132,132,132,132,132,132,132,132,132,132,923,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4351,4040,4194,4194,4194,4194,4194,4194,4194,4194,4194,4194,4196,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4193,4194,4194,4194,4194,4194,4194,4194,4194,4194,4194,4196,1208,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1210, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4351,4039,4040,4194,4194,4194,4194,4194,4194,4194,4038,4353,1365,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1365, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4351,4039,4040,4194,4038,4039,4039,4039,4353,0,1365,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1365, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4351,4352,4353,0,0,0,0,0,1365,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1365, +3057,3057,3057,3057,2739,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1365,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1365, +2422,2422,2422,2422,2897,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1365,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1365, +2422,2422,2422,2422,3056,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1365,0,0,0,3454,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1365, +2422,2422,2422,2422,2422,2897,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1365,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1365, +2741,0,3054,2742,2422,2897,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1523,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3454,0,0,0,0,0,0,0,0,0,0,0,0,1365, +0,0,0,2900,2422,2897,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1365, +0,0,0,2900,2422,2897,0,0,0,4035,4036,4036,4036,4036,4036,4037,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1207,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1365, +0,0,0,2900,2422,2897,0,0,0,4193,4194,4194,4194,4194,4194,4195,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1365,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1365, +0,0,0,3058,2422,2897,0,0,0,4193,4194,4194,4038,4039,4040,4195,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1365,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1365, +0,0,2900,2422,2422,2897,0,0,4035,4356,4194,4038,4353,0,4198,4195,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1365,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1365, +0,0,2900,2422,2422,2897,0,0,4193,4194,4194,4196,0,0,4198,4195,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1365,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1365, +0,0,0,2742,2422,2897,0,4035,4356,4194,4038,4353,0,0,4198,4195,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1365,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5701,0,0,0,0,0,0,0,0,1365, +0,0,0,2895,2422,2897,0,4193,3882,4194,4195,0,0,0,4198,4195,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1365,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1365, +0,0,0,2895,2422,2897,0,4351,4040,4194,4195,0,0,0,4198,4195,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1365,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1365, +0,0,0,2895,2422,2897,0,0,4193,4194,4195,4035,4037,0,4198,4195,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1365,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1365, +0,0,0,2895,2422,2897,0,0,4193,4194,4354,4356,4354,4355,4356,4195,0,0,2271,2272,2273,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1365, +0,0,0,2895,2422,2897,0,0,4351,4040,4194,4194,4194,4194,4038,4353,0,0,2429,2430,2431,0,0,2271,2272,2273,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1365, +0,0,0,2895,2422,2897,0,0,0,0,4040,4194,4194,4038,4353,0,0,0,2587,2588,2589,0,0,2429,2430,2431,0,0,0,0,0,0,0,5701,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1365, +0,0,0,3053,3054,3055,0,0,0,0,4351,4352,4352,4353,0,0,0,4034,0,0,0,0,0,2587,2588,2589,0,0,0,0,0,1051,1051,1051,1051,1051,1051,1051,1051,1052,0,0,0,1050,1051,1051,1051,1051,1051,1051,1051,1051,1052,0,1050,1051,1051,1051,1051,1526, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4355,4355,4355,4355,4355,4355,4355,4037,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4193,4194,4194,4194,4194,4194,4194,4194,4195,0,0,0,0,0,0,0,0,0,2271,2272,2273,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,4035,4036,4036,4036,4036,4037,0,0,0,0,0,4034,0,2271,2272,2273,4193,4194,4194,4194,4194,4194,4194,4194,4195,0,0,0,0,0,0,0,0,0,2429,2430,2431,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,4198,4194,4194,4194,4194,4354,0,0,0,0,0,0,0,2429,2430,2431,4193,4194,4194,4194,4194,4194,4194,4038,4353,0,0,0,0,0,0,0,0,0,2587,2588,2589,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,4198,4194,4194,4194,4194,4194,4354,4036,4037,0,0,0,0,2587,2588,2589,4193,4194,4194,4194,4194,4194,4194,4196,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2271,2272,2273,0,0,0, +0,0,0,4351,4040,4194,4194,4194,4194,4194,4194,4195,0,0,0,0,0,0,0,4193,4194,4194,4194,4194,4194,4038,4353,0,0,2271,2272,2273,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2429,2430,2431,0,0,0, +0,0,0,0,4351,4040,4194,4194,4194,4194,4194,4195,0,0,0,0,0,0,0,4193,4194,4194,4194,4194,4194,4195,0,0,0,2429,2430,2431,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2587,2588,2589,0,0,0, +0,0,0,0,0,4351,4039,4039,4039,4039,4039,4353,0,2271,2272,2273,0,0,0,4351,4040,4194,4194,4194,4038,4353,0,0,0,2587,2588,2589,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,2429,2430,2431,0,0,0,0,4193,4194,4194,4038,4353,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,2587,2588,2589,0,0,0,0,4351,4039,4039,4353,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374, +2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374, +2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374, +2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374,2374, +0,0,0,0,0,0,0,0,1365,0,0,0,0,0,0,0,0,532,0,12625,12626,0,0,0,0,0,0,12625,12626,0,534,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3650,3176,3176,3654,3811,3809,3812,3809,3811,3653,3176,3176,3652,0, +0,0,0,12515,12516,0,0,0,1365,0,0,0,0,0,0,0,0,532,0,12653,12654,0,0,0,0,0,0,12653,12654,0,534,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3650,3176,3176,3652,0,3969,3970,3971,0,3650,3176,3176,3652,0, +1051,1210,0,12543,12544,0,1208,1051,1526,0,0,0,0,0,0,0,0,690,691,691,691,691,691,691,691,691,691,691,691,691,692,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3650,3176,3176,3652,0,4285,4133,4287,0,3650,3176,3176,3652,0, +0,1365,12428,0,0,12428,1365,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3650,3176,3176,3652,0,0,4130,0,0,3650,3176,3176,3652,0, +0,1524,1210,0,0,1208,1526,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3650,3176,3176,3652,0,0,4130,0,0,3650,3176,3176,3652,0, +0,0,1365,0,0,1365,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3650,3176,3176,3652,0,0,4130,0,0,3650,3176,3176,3652,0, +0,0,1523,0,0,1523,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3650,3176,3176,3652,0,0,4130,0,0,3650,3176,3176,3652,0, +0,0,12428,0,0,12428,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3650,3176,3176,3652,0,0,4130,0,0,3650,3176,3176,3652,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3650,3176,3176,3652,0,0,4288,0,0,3650,3176,3176,3652,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3650,3176,3176,3652,0,0,12436,0,0,3650,3176,3176,3652,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3650,3176,3176,3496,3493,3493,3493,3493,3493,3495,3176,3176,3652,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10493,10494,0,0,0,0,0,0,0,0,0,0,3808,3809,3809,3812,3809,3809,3812,3809,3809,3812,3809,3809,3810,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10493,10494,0,0,0,2345,0,2345,0,0,0,2345,0,2345,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2345,0,2345,0,0,0,2345,0,2345,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2345,0,2345,0,2345,0,2345,0,2345,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2345,0,2345,0,2345,0,2345,0,2345,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,155,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2345,0,2345,0,2345,0,2345,0,2345,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2345,0,2345,0,2345,0,2345,0,2345,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2345,0,0,0,2345,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,155,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3313,3309,3314,3315, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3474,3467,3475,3476, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3925,3927,0,0,0,0,0,11557,0,0,0,11557,0,0,3471,3467,3470,3631, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12625,12626,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3924,0,0,0,0,0,4241,4243,0,0,0,0,0,11585,0,0,0,11585,0,3307,3629,3630,3631,0, +0,0,0,0,0,0,10491,10492,0,0,0,0,0,0,0,0,0,12653,12654,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10825,11585,10825,10825,9066,0,0,0,0,0,0,0,0,11529,0,0,0,0,0,0,0,0, +375,375,375,375,376,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10825,10825,10881,10881,10825,0,10825,0,0,0,10825,0,0,0,0,0,0,0,0,0,0,0,0,3307,0,0,0,0, +0,0,0,0,534,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10825,0,0,0,10825,0,9066,0,0,0,11613,10825,10825,10304,10305,10306,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,694,376,0,0,0,0,0,0,0,12625,12626,0,0,0,0,0,0,0,0,0,0,0,0,10591,10592,0,0,0,10825,0,0,0,11557,10825,10825,10825,0,0,11557,0,10825,10332,10333,10334,0,0,0,0,0,3308,3309,3309,3309,3309,3314,3315, +0,0,0,0,0,534,0,0,0,0,0,0,0,12653,12654,0,0,0,0,0,0,0,0,0,0,0,0,10619,10620,0,0,0,10825,0,10825,0,0,0,0,0,0,0,10825,0,10881,0,0,0,0,10825,10881,0,3308,3309,3467,3467,3467,3467,3475,3476, +853,0,852,537,533,534,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8908,0,0,0,1383,0,0,0,0,0,0,0,3307,0,0,9067,10825,10825,10825,0,9066,0,0,0,0,0,0,0,3466,3467,3470,3625,3466,3467,3470,3631, +0,0,0,532,0,534,0,0,0,0,0,0,0,0,0,0,0,0,1227,1069,1069,1069,1069,1069,1069,1069,1069,1069,1226,1069,1069,1070,0,0,0,0,10825,10825,0,10825,0,0,0,0,10825,0,0,0,10881,0,0,3308,3623,3464,3626,0,3629,3630,3631,0, +0,0,9065,532,0,534,0,0,0,0,0,0,0,0,0,0,0,0,1383,0,0,0,0,0,0,0,0,0,0,0,0,10825,10825,10825,0,0,9067,10825,0,11557,0,10941,10942,0,10825,0,0,11557,0,0,10825,3466,3467,3468,0,0,0,0,0,0, +0,0,0,532,0,534,0,0,0,0,0,0,0,0,0,0,0,0,1383,0,3925,3926,3927,0,0,0,3925,3926,3927,0,0,10825,9066,10825,0,0,9065,9066,0,10882,0,10969,10970,0,10881,0,0,10826,0,0,10825,3624,3625,3626,10703,10704,0,3306,0,0, +0,0,374,695,0,534,0,0,0,0,0,0,0,0,0,0,0,0,1383,0,4083,4084,4085,0,0,0,4083,4084,4085,0,0,0,0,0,0,0,10825,10825,0,10825,0,0,0,0,10825,0,0,0,0,0,10853,3313,3315,0,10731,10732,0,0,0,0, +0,0,532,0,0,534,0,0,0,0,0,0,5701,0,0,0,1227,1069,1386,0,4241,4242,4243,0,0,0,4241,4242,4243,0,0,10825,10825,11585,0,0,0,0,0,10853,11613,0,0,10825,10854,0,0,10825,10825,10882,10825,3466,3312,3310,0,0,0,0,3307,0, +0,0,532,0,0,534,0,0,0,0,0,0,0,0,0,0,1383,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10825,0,0,0,0,0,0,0,0,0,0,0,10881,10825,0,0,3629,3465,3473,0,0,0,0,0,0, +0,0,690,537,0,534,0,0,0,8693,0,0,0,0,0,0,1383,0,0,0,0,0,0,3925,3926,3927,0,0,0,0,3933,3934,3935,10881,10882,10826,0,0,0,10853,3924,10825,10826,0,0,0,10854,0,10825,0,0,3313,3623,3473,0,0,0,1232,3307,0, +0,0,9065,532,0,534,0,0,0,0,0,4743,4744,0,1711,1713,1540,0,0,0,0,0,0,4083,4084,4085,0,0,0,0,4091,4092,4093,11613,0,0,0,0,10825,10882,0,0,0,0,0,0,10825,9065,0,0,0,3629,3630,3626,10825,10825,10825,1390,0,0, +0,0,0,532,0,534,0,0,0,0,0,4901,4902,0,0,0,1383,0,0,3925,3926,3927,0,4241,4242,4243,0,0,0,0,4249,4250,4251,0,11529,0,0,0,10825,10826,0,0,0,10825,11585,0,0,0,0,0,0,10853,10825,10825,0,0,0,1390,0,0, +0,0,0,532,0,534,0,0,0,0,0,0,0,0,0,0,1383,0,0,4083,4084,4085,0,0,0,0,0,0,0,0,0,0,0,10825,0,11585,10825,0,0,0,0,0,0,0,0,0,10825,10881,10825,0,10826,0,10825,0,10825,10881,0,1390,0,0, +0,0,0,532,0,534,0,0,0,0,0,0,0,0,0,0,1383,0,0,4241,4242,4243,0,0,0,0,0,0,0,0,1523,0,0,0,0,0,10825,0,9067,10825,10826,1232,0,10825,0,0,10825,0,0,0,0,0,10881,1233,1076,1076,1076,1551,10854,0, +0,0,0,532,0,534,0,0,0,0,0,5547,0,8695,0,0,1383,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11557,0,10825,0,0,1390,0,10881,10882,0,10826,9065,9065,10826,10825,10825,3307,1390,0,0,0,0,0,0, +0,0,0,532,533,534,0,0,0,0,0,5547,5547,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1207,0,0,0,0,0,0,11557,10825,10826,0,1390,0,0,10825,10854,10853,0,0,0,0,0,0,1390,0,11557,11585,11557,0,0, +0,0,0,690,691,692,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1524,3925,3926,3926,3927,0,0,0,0,0,10608,1390,10608,0,0,0,0,0,0,0,0,0,0,1390,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4083,4081,4082,4085,0,0,0,0,0,0,1390,0,3308,3309,3310,0,0,0,0,0,0,0,1390,0,0,0,0,0,3308, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4083,4239,4240,4085,0,0,0,0,0,0,1390,0,3466,3467,3468,0,3308,3309,3310,1233,1076,1076,1551,0,0,0,0,3313,3311, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9071,0,0,0,0,0,0,4241,4087,4242,4243,0,0,0,0,0,0,1390,0,3624,3625,3626,0,3466,3467,3468,1390,0,0,3316,3317,3317,3309,3309,3311,3467, +0,0,0,0,0,9333,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5547,0,0,0,0,0,0,0,0,0,4247,4248,0,0,0,0,0,0,0,0,1390,0,0,0,0,0,3624,3625,3626,1390,0,0,3629,3465,3475,3475,3475,3475,3475, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3930,3934,3928,4090,0,0,0,0,0,0,0,0,0,1390,0,3306,0,0,0,0,0,0,1390,3313,3315,0,3629,3633,3465,3475,3475,3475, +0,0,0,0,0,0,0,9333,9484,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5549,0,0,3925,4240,4089,4081,4248,0,0,0,1233,1076,1076,1076,1076,1076,1550,1076,1076,1076,1076,1076,1076,1076,1076,1393,3629,3628,3317,3315,0,3474,3475,3475,3475, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5547,0,0,0,3925,4240,4084,4087,4248,0,0,0,0,1390,0,3308,3309,3310,0,0,3308,3309,3310,0,0,0,0,0,1549,1235,3629,3630,3628,3317,3623,3475,3475,3475, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4083,4084,4084,4085,0,0,0,0,0,1390,0,3466,3467,3468,0,0,3466,3467,3468,0,0,0,0,0,3306,1390,0,0,3471,3475,3475,3475,3475,3470, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4083,4084,4084,4085,0,0,0,0,0,1390,0,3624,3625,3626,0,0,3624,3625,3626,0,0,3313,3314,3314,3315,1390,0,0,3632,3633,3630,3630,3633,3634, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3930,4240,4084,4084,4085,0,0,134,3122,2652,3282,2652,3123,134,0,0,0,0,0,0,0,0,3471,3467,3467,3473,1549,1076,1076,1076,1076,1077,0,3313,3314, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4083,4084,4084,4084,4085,0,0,3122,3126,2810,2810,2810,3127,3123,0,0,0,0,0,0,0,0,3471,3467,3467,3312,3314,3314,3314,3314,3314,3314,3314,3311,3475 + + + + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12436,0,0,0,12436,0,0,0,12436,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12436,0,0,0,12436,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12395,0,0,12401,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12428,12378,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/forge-gui/res/adventure/Shandalar/sprites/boss/chandra.atlas b/forge-gui/res/adventure/Shandalar/sprites/boss/chandra.atlas new file mode 100644 index 00000000000..8ff8fa07d63 --- /dev/null +++ b/forge-gui/res/adventure/Shandalar/sprites/boss/chandra.atlas @@ -0,0 +1,68 @@ +chandra.png +size: 64,96 +format: RGBA8888 +filter: Nearest,Nearest +repeat: none +Avatar + xy: 0, 0 + size: 16, 16 +Idle + xy: 0, 16 + size: 16, 16 +Idle + xy: 16, 16 + size: 16, 16 +Idle + xy: 32, 16 + size: 16, 16 +Idle + xy: 48, 16 + size: 16, 16 +Walk + xy: 0, 32 + size: 16, 16 +Walk + xy: 16, 32 + size: 16, 16 +Walk + xy: 32, 32 + size: 16, 16 +Walk + xy: 48, 32 + size: 16, 16 +Attack + xy: 0, 48 + size: 16, 16 +Attack + xy: 16, 48 + size: 16, 16 +Attack + xy: 32, 48 + size: 16, 16 +Attack + xy: 48, 48 + size: 16, 16 +Hit + xy: 0, 64 + size: 16, 16 +Hit + xy: 16, 64 + size: 16, 16 +Hit + xy: 32, 64 + size: 16, 16 +Hit + xy: 48, 64 + size: 16, 16 +Death + xy: 0, 80 + size: 16, 16 +Death + xy: 16, 80 + size: 16, 16 +Death + xy: 32, 80 + size: 16, 16 +Death + xy: 48, 80 + size: 16, 16 \ No newline at end of file diff --git a/forge-gui/res/adventure/Shandalar/sprites/boss/chandra.png b/forge-gui/res/adventure/Shandalar/sprites/boss/chandra.png new file mode 100644 index 00000000000..415f2e6327b Binary files /dev/null and b/forge-gui/res/adventure/Shandalar/sprites/boss/chandra.png differ diff --git a/forge-gui/res/adventure/Shandalar/sprites/items.atlas b/forge-gui/res/adventure/Shandalar/sprites/items.atlas index 5e7919db4cd..3c3fb6cce51 100644 --- a/forge-gui/res/adventure/Shandalar/sprites/items.atlas +++ b/forge-gui/res/adventure/Shandalar/sprites/items.atlas @@ -352,25 +352,26 @@ WhiteStaff xy: 352,160 size: 16, 16 GarrukAxe - xy: 303,273 - size: 19, 15 + xy: 304,272 + size: 16, 16 BlueRobes - xy: 272,63 - size: 16, 18 + xy: 272,64 + size: 16, 16 Armory - xy: 129,512 - size: 14, 17 + xy: 128,512 + size: 16, 16 HorseHoove xy: 80,496 - size: 17, 16 + size: 16, 16 PirateFlag - xy: 0,495 - size: 18, 17 + xy: 0,496 + size: 16, 16 Scythe - xy: 288,977 - size: 18, 14 + xy: 288,976 + size: 16, 16 ChickenEgg - xy: 306,800 - size: 13, 15 - - \ No newline at end of file + xy: 304,800 + size: 16, 16 +ChallengeCoin + xy: 32,512 + size: 16, 16 \ No newline at end of file diff --git a/forge-gui/res/adventure/Shandalar/world/black.json b/forge-gui/res/adventure/Shandalar/world/black.json index 0dd649d3b21..50c34b51309 100644 --- a/forge-gui/res/adventure/Shandalar/world/black.json +++ b/forge-gui/res/adventure/Shandalar/world/black.json @@ -40,6 +40,9 @@ "Black Wiz1", "Black Wiz2", "Black Wiz3", + "Challenger 20", + "Challenger 21", + "Challenger 22", "Dark Knight", "Death Knight", "Demon", diff --git a/forge-gui/res/adventure/Shandalar/world/blue.json b/forge-gui/res/adventure/Shandalar/world/blue.json index 8c7bc8e7a08..38d63411f8a 100644 --- a/forge-gui/res/adventure/Shandalar/world/blue.json +++ b/forge-gui/res/adventure/Shandalar/world/blue.json @@ -30,6 +30,9 @@ "enemies": [ "Aether Channeler", "Bird", + "Challenger 20", + "Challenger 21", + "Challenger 22", "Djinn", "Elemental", "Frost Titan", diff --git a/forge-gui/res/adventure/Shandalar/world/enemies.json b/forge-gui/res/adventure/Shandalar/world/enemies.json index 192888b00cb..49a3e83430b 100644 --- a/forge-gui/res/adventure/Shandalar/world/enemies.json +++ b/forge-gui/res/adventure/Shandalar/world/enemies.json @@ -1603,9 +1603,258 @@ ], "colors": "GW" }, +{ + "name": "Challenger 20", + "nameOverride": "Challenger", + "sprite": "sprites/doppelganger.atlas", + "deck": [ + "decks/challenger_20_allied_fires.dck", + "decks/challenger_20_cavalcade_charge.dck", + "decks/challenger_20_final_adventure.dck", + "decks/challenger_20_flash_of_ferocity.dck" + ], + "randomizeDeck": true + "spawnRate": 0.25, + "difficulty": 0.25, + "speed": 28, + "life": 22, + "rewards": [ + { + "type": "deckCard", + "probability": 1, + "count": 2, + "addMaxCount": 4, + "rarity": [ + "common" + ] + }, + { + "type": "deckCard", + "probability": 0.5, + "count": 1, + "addMaxCount": 2, + "rarity": [ + "uncommon" + ], + "cardTypes": [ + "Creature", + "Artifact", + "Enchantment", + "Instant", + "Sorcery" + ] + }, + { + "type": "deckCard", + "probability": 0.25, + "count": 1, + "addMaxCount": 1, + "rarity": [ + "rare" + ], + "cardTypes": [ + "Creature", + "Artifact", + "Enchantment", + "Instant", + "Sorcery" + ] + }, + { + "type": "deckCard", + "probability": 0.1, + "count": 1, + "rarity": [ + "rare" + ], + "cardTypes": [ + "Land" + ] + }, + { + "type": "gold", + "probability": 0.3, + "count": 210, + "addMaxCount": 90 + }, + { + "type": "item", + "probability": 1, + "count": 1, + "itemName": "Challenge Coin" + } + ], + "colors": "UBRWG" +}, +{ + "name": "Challenger 21", + "nameOverride": "Challenger", + "sprite": "sprites/doppelganger.atlas", + "deck": [ + "decks/challenger_21_azorius_control.dck", + "decks/challenger_21_dimir_rogue.dck", + "decks/challenger_21_mono-green_stompy.dck", + "decks/challenger_21_mono-red_aggro.dck" + ], + "randomizeDeck": true + "spawnRate": 0.25, + "difficulty": 0.25, + "speed": 28, + "life": 22, + "rewards": [ + { + "type": "deckCard", + "probability": 1, + "count": 2, + "addMaxCount": 4, + "rarity": [ + "common" + ] + }, + { + "type": "deckCard", + "probability": 0.5, + "count": 1, + "addMaxCount": 2, + "rarity": [ + "uncommon" + ], + "cardTypes": [ + "Creature", + "Artifact", + "Enchantment", + "Instant", + "Sorcery" + ] + }, + { + "type": "deckCard", + "probability": 0.25, + "count": 1, + "addMaxCount": 1, + "rarity": [ + "rare" + ], + "cardTypes": [ + "Creature", + "Artifact", + "Enchantment", + "Instant", + "Sorcery" + ] + }, + { + "type": "deckCard", + "probability": 0.1, + "count": 1, + "rarity": [ + "rare" + ], + "cardTypes": [ + "Land" + ] + }, + { + "type": "gold", + "probability": 0.3, + "count": 210, + "addMaxCount": 90 + }, + { + "type": "item", + "probability": 1, + "count": 1, + "itemName": "Challenge Coin" + } + ], + "colors": "UBRWG" +}, +{ + "name": "Challenger 22", + "nameOverride": "Challenger", + "sprite": "sprites/doppelganger.atlas", + "deck": [ + "decks/challenger_22_dimir_control.dck", + "decks/challenger_22_gruul_stompy.dck", + "decks/challenger_22_mono_white_aggro.dck", + "decks/challenger_22_rakdos_vampires.dck" + ], + "randomizeDeck": true + "spawnRate": 0.25, + "difficulty": 0.25, + "speed": 28, + "life": 22, + "rewards": [ + { + "type": "deckCard", + "probability": 1, + "count": 2, + "addMaxCount": 4, + "rarity": [ + "common" + ] + }, + { + "type": "deckCard", + "probability": 0.5, + "count": 1, + "addMaxCount": 2, + "rarity": [ + "uncommon" + ], + "cardTypes": [ + "Creature", + "Artifact", + "Enchantment", + "Instant", + "Sorcery" + ] + }, + { + "type": "deckCard", + "probability": 0.25, + "count": 1, + "addMaxCount": 1, + "rarity": [ + "rare" + ], + "cardTypes": [ + "Creature", + "Artifact", + "Enchantment", + "Instant", + "Sorcery" + ] + }, + { + "type": "deckCard", + "probability": 0.1, + "count": 1, + "rarity": [ + "rare" + ], + "cardTypes": [ + "Land" + ] + }, + { + "type": "gold", + "probability": 0.3, + "count": 210, + "addMaxCount": 90 + }, + { + "type": "item", + "probability": 1, + "count": 1, + "itemName": "Challenge Coin" + } + ], + "colors": "UBRWG" +}, { "name": "Chandra", - "sprite": "sprites/red_wiz2.atlas", + "sprite": "sprites/boss/chandra.atlas", "deck": [ "decks/miniboss/Fire of Kaladesh.dck" ], @@ -1680,6 +1929,11 @@ "probability": 1, "count": 1000, "addMaxCount": 9000 + }, + { + "type": "item", + "probability": 1, + "count": 1, "itemName": "Chandra's Stone" } ], diff --git a/forge-gui/res/adventure/Shandalar/world/green.json b/forge-gui/res/adventure/Shandalar/world/green.json index 7b78d6b732b..2b1fbff71c5 100644 --- a/forge-gui/res/adventure/Shandalar/world/green.json +++ b/forge-gui/res/adventure/Shandalar/world/green.json @@ -38,6 +38,9 @@ "Beastmaster", "Centaur", "Centaur Warrior", + "Challenger 20", + "Challenger 21", + "Challenger 22", "Dino", "Eldraine Faerie", "Elf", diff --git a/forge-gui/res/adventure/Shandalar/world/items.json b/forge-gui/res/adventure/Shandalar/world/items.json index 352ac6e8c1b..6ad55c8384c 100644 --- a/forge-gui/res/adventure/Shandalar/world/items.json +++ b/forge-gui/res/adventure/Shandalar/world/items.json @@ -1,4 +1,9 @@ [ + { + "name": "Challenge Coin", + "description": "A heavy coin made of unknown material.", + "iconName": "ChallengeCoin" + }, { "name": "Chandra's Tome", "description": "Draft a Chandra themed card that can be cast with mana of any color.", diff --git a/forge-gui/res/adventure/Shandalar/world/red.json b/forge-gui/res/adventure/Shandalar/world/red.json index bcb3d769ce2..6229fec8041 100644 --- a/forge-gui/res/adventure/Shandalar/world/red.json +++ b/forge-gui/res/adventure/Shandalar/world/red.json @@ -33,9 +33,11 @@ "Ashmouth Devil", "Axgard Dwarf", "Berserker", - "Boar", "Boggart", - "Bull", + "Challenger 1", + "Challenger 2", + "Challenger 3", + "Challenger 4", "Cyclops", "Devil", "Dinosaur", @@ -43,7 +45,6 @@ "Dwarf", "Efreet", "Fire Elemental", - "Fire Giant", "Flame Elemental", "Goblin", "Goblin Chief", @@ -52,8 +53,6 @@ "Immersturm Demon", "Kavu", "Khan", - "Kobold", - "Magma Elemental", "Mindclaw Shaman", "Minotaur", "Minotaur Flayer", @@ -66,7 +65,10 @@ "Vampire Lord", "Viashino", "Wild-Magic Sorcerer", - "Yeti" + "Yeti", + "Kobold", + "Boar", + "Bull" ], "pointsOfInterest": [ "Red Castle", @@ -113,8 +115,7 @@ "CaveRH", "CaveRJ", "Kobold Mine", - "Temple of Chandra", - "Tibalts Dungeon" + "Temple of Chandra" ], "structures": [ { diff --git a/forge-gui/res/adventure/Shandalar/world/waste.json b/forge-gui/res/adventure/Shandalar/world/waste.json index e45e78b6444..771d29f0802 100644 --- a/forge-gui/res/adventure/Shandalar/world/waste.json +++ b/forge-gui/res/adventure/Shandalar/world/waste.json @@ -29,6 +29,9 @@ ], "enemies": [ "Bandit", + "Challenger 20", + "Challenger 21", + "Challenger 22", "ClayGolem", "Construct", "Eldrazi", diff --git a/forge-gui/res/adventure/Shandalar/world/white.json b/forge-gui/res/adventure/Shandalar/world/white.json index d5f4f952195..3c92e3f67a9 100644 --- a/forge-gui/res/adventure/Shandalar/world/white.json +++ b/forge-gui/res/adventure/Shandalar/world/white.json @@ -35,6 +35,9 @@ "Beastmaster", "Cat", "Cathar", + "Challenger 20", + "Challenger 21", + "Challenger 22", "Cleric", "Dawnhart Witch", "Eldraine Knight", diff --git a/forge-gui/res/blockdata/blocks.txt b/forge-gui/res/blockdata/blocks.txt index 4e25f1fb7a2..9ada9398861 100644 --- a/forge-gui/res/blockdata/blocks.txt +++ b/forge-gui/res/blockdata/blocks.txt @@ -102,15 +102,20 @@ Innistrad: Midnight Hunt, 3/6/MID, MID Innistrad: Crimson Vow, 3/6/VOW, VOW Innistrad: Double Feature, 3/6/MID, DBL Kamigawa: Neon Dynasty, 3/6/NEO, NEO +Alchemy: Kamigawa, 3/6/NEO, YNEO Streets of New Capenna, 3/6/SNC, SNC +Alchemy: New Capenna, 3/6/SNC, YSNC Alchemy Horizons: Baldur's Gate, 3/6/HBG, HBG Double Masters 2022, 3/6/2X2, 2X2 Dominaria United, 3/6/DMU, DMU Dominaria United Jumpstart, -/2/DMU, Meta-Choose(S(DMU Coalition Corps)Coaltion Corps;S(DMU Coalition Legion)Coaltion Legion;S(DMU Mystic Mischief)Mystic Mischief;S(DMU Arcane Mischief)Arcane Mischief;S(DMU Totally Ruthless)Totally Ruthless;S(DMU Totally Merciless)Totally Merciless;S(DMU Ready to Charge)Ready to Charge;S(DMU Ready to Attack)Ready to Attack;S(DMU Beast Territory)Beast Territory;S(DMU Monster Territory)Monster Territory)Themes +Alchemy: Dominaria, 3/6/DMU, YDMU The Brothers' War, 3/6/BRO, BRO The Brothers' War Jumpstart, -/2/BRO, Meta-Choose(S(BRO Infantry 1)Infantry 1;S(BRO Infantry 2)Infantry 2;S(BRO Powerstones 1)Powerstones 1;S(BRO Powerstones 2)Powerstones 2;S(BRO Unearthed 1)Unearthed 1;S(BRO Unearthed 2)Unearthed 1;S(BRO Welded 1)Welded 1;S(BRO Welded 2)Welded 1;S(BRO Titanic 1)Titanic 1;S(BRO Titanic 2)Titanic 2)Themes +Alchemy: The Brothers' War, 3/6/BRO, YBRO 30th Anniversary Edition, 3/6/30A, 30A Jumpstart 2022, -/2/J22, Meta-Choose(S(J22 Vehicles)Vehicles;S(J22 Knights)Knights;S(J22 Constellation 1)Constellation 1;S(J22 Constellation 2)Constellation 2;S(J22 Teamwork 1)Teamwork 1;S(J22 Teamwork 2)Teamwork 2;S(J22 Spirits 1)Spirits 1;S(J22 Spirits 2)Spirits 2;S(J22 Blink 1)Blink 1;S(J22 Blink 2)Blink 2;S(J22 Blink 3)Blink 3;S(J22 Blink 4)Blink 4;S(J22 Cats 1)Cats 1;S(J22 Cats 2)Cats 2;S(J22 Cats 3)Cats 3;S(J22 Cats 4)Cats 4;S(J22 Law 1)Law 1;S(J22 Law 2)Law 2;S(J22 Law 3)Law 3;S(J22 Law 4)Law 4;S(J22 Holy 1)Holy 1;S(J22 Holy 2)Holy 2;S(J22 Holy 3)Holy 3;S(J22 Holy 4)Holy 4;S(J22 Shapeshifters)Shapeshifters;S(J22 Snow)Snow;S(J22 Go to School 1)Go to School 1;S(J22 Go to School 2)Go to School 2;S(J22 Scrying 1)Scrying 1;S(J22 Scrying 2)Scrying 2;S(J22 Faeries 1)Faeries 1;S(J22 Faeries 2)Faeries 2;S(J22 Merfolk 1)Merfolk 1;S(J22 Merfolk 2)Merfolk 2;S(J22 Merfolk 3)Merfolk 3;S(J22 Merfolk 4)Merfolk 4;S(J22 Detective 1)Detective 1;S(J22 Detective 2)Detective 2;S(J22 Detective 3)Detective 3;S(J22 Detective 4)Detective 4;S(J22 Think Again 1)Think Again 1;S(J22 Think Again 2)Think Again 2;S(J22 Think Again 3)Think Again 3;S(J22 Think Again 4)Think Again 4;S(J22 Inventive 1)Inventive 1;S(J22 Inventive 2)Inventive 2;S(J22 Inventive 3)Inventive 3;S(J22 Inventive 4)Inventive 4;S(J22 Unlucky Thirteen)Unlucky Thirteen;S(J22 Rats)Rats;S(J22 Demons 1)Demons 1;S(J22 Demons 2)Demons 2;S(J22 Boneyard 1)Boneyard 1;S(J22 Boneyard 2)Boneyard 2;S(J22 Morbid 1)Morbid 1;S(J22 Morbid 2)Morbid 2;S(J22 Cruel 1)Cruel 1;S(J22 Cruel 2)Cruel 2;S(J22 Cruel 3)Cruel 3;S(J22 Cruel 4)Cruel 4;S(J22 Fangs 1)Fangs 1;S(J22 Fangs 2)Fangs 2;S(J22 Fangs 3)Fangs 3;S(J22 Fangs 4)Fangs 4;S(J22 Zombies 1)Zombies 1;S(J22 Zombies 2)Zombies 2;S(J22 Zombies 3)Zombies 3;S(J22 Zombies 4)Zombies 4;S(J22 Gross 1)Gross 1;S(J22 Gross 2)Gross 2;S(J22 Gross 3)Gross 3;S(J22 Gross 4)Gross 4;S(J22 Spicy)Spicy;S(J22 Speedy)Speedy;S(J22 Experimental 1)Experimental 1;S(J22 Experimental 2)Experimental 2;S(J22 Dragons 1)Dragons 1;S(J22 Dragons 2)Dragons 2;S(J22 Cycling 1)Cycling 1;S(J22 Cycling 2)Cycling 2;S(J22 Goblins 1)Goblins 1;S(J22 Goblins 2)Goblins 2;S(J22 Goblins 3)Goblins 3;S(J22 Goblins 4)Goblins 4;S(J22 Treasure 1)Treasure 1;S(J22 Treasure 2)Treasure 2;S(J22 Treasure 3)Treasure 3;S(J22 Treasure 4)Treasure 4;S(J22 Fiery 1)Fiery 1;S(J22 Fiery 2)Fiery 2;S(J22 Fiery 3)Fiery 3;S(J22 Fiery 4)Fiery 4;S(J22 Raid 1)Raid 1;S(J22 Raid 2)Raid 2;S(J22 Raid 3)Raid 3;S(J22 Raid 4)Raid 4;S(J22 Eldrazi)Eldrazi;S(J22 Primates)Primates;S(J22 Multi-Headed 1)Multi-Headed 1;S(J22 Multi-Headed 2)Multi-Headed 2;S(J22 Gigantic 1)Gigantic 1;S(J22 Gigantic 2)Gigantic 2;S(J22 Landfall 1)Landfall 1;S(J22 Landfall 2)Landfall 2;S(J22 Elves 1)Elves 1;S(J22 Elves 2)Elves 2;S(J22 Elves 3)Elves 3;S(J22 Elves 4)Elves 4;S(J22 Wolves 1)Wolves 1;S(J22 Wolves 2)Wolves 2;S(J22 Wolves 3)Wolves 3;S(J22 Wolves 4)Wolves 4;S(J22 Ferocious 1)Ferocious 1;S(J22 Ferocious 2)Ferocious 2;S(J22 Ferocious 3)Ferocious 3;S(J22 Ferocious 4)Ferocious 4;S(J22 Insects 1)Insects 1;S(J22 Insects 2)Insects 2;S(J22 Insects 3)Insects 3;S(J22 Insects 4)Insects 4;S(J22 Urza's)Urza's)Themes Dominaria Remastered, 3/6/DMR, DMR Phyrexia: All Will Be One, 3/6/ONE, ONE Phyrexia: All Will Be One Jumpstart, -/2/ONE, Meta-Choose(S(ONE Mite-y 1)Mite-y 1;S(ONE Mite-y 2)Mite-y 2;S(ONE Progress 1)Progress 1;S(ONE Progress 2)Progress 2;S(ONE Corruption 1)Corruption 1;S(ONE Corruption 2)Corruption 2;S(ONE Rebellious 1)Rebellious 1;S(ONE Rebellious 2)Rebellious 2;S(ONE Toxic 1)Toxic 1;S(ONE Toxic 2)Toxic 2)Themes +Alchemy: Phyrexia, 3/6/ONE, YONE diff --git a/forge-gui/res/cardsfolder/d/desolation.txt b/forge-gui/res/cardsfolder/d/desolation.txt index 6cf3c555575..e95d45e7410 100644 --- a/forge-gui/res/cardsfolder/d/desolation.txt +++ b/forge-gui/res/cardsfolder/d/desolation.txt @@ -3,7 +3,7 @@ ManaCost:1 B B Types:Enchantment T:Mode$ Phase | Phase$ End of Turn | TriggerZones$ Battlefield | Execute$ TrigSac | TriggerDescription$ At the beginning of each end step, each player who tapped a land for mana this turn sacrifices a land. Desolation deals 2 damage to each player who sacrificed a Plains this way. SVar:TrigSac:DB$ Sacrifice | SacValid$ Land | Defined$ Player.TappedLandForManaThisTurn | RememberSacrificed$ True | SubAbility$ DBRepeat -SVar:DBRepeat:DB$ RepeatEach | DefinedCards$ Remembered | AdditionalRestriction$ Plains | UseImprinted$ True | RepeatSubAbility$ DBDamage | SubAbility$ DBCleanup +SVar:DBRepeat:DB$ RepeatEach | DefinedCards$ Remembered.Plains | UseImprinted$ True | RepeatSubAbility$ DBDamage | SubAbility$ DBCleanup SVar:DBDamage:DB$ DealDamage | Defined$ ImprintedController | NumDmg$ 2 SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True AI:RemoveDeck:All diff --git a/forge-gui/res/cardsfolder/k/kinzu_of_the_bleak_coven.txt b/forge-gui/res/cardsfolder/k/kinzu_of_the_bleak_coven.txt index 2d7ec481b10..1a955d563a9 100644 --- a/forge-gui/res/cardsfolder/k/kinzu_of_the_bleak_coven.txt +++ b/forge-gui/res/cardsfolder/k/kinzu_of_the_bleak_coven.txt @@ -4,6 +4,6 @@ Types:Legendary Creature Phyrexian Vampire PT:5/4 K:Flying T:Mode$ ChangesZone | ValidCard$ Creature.nonToken+Other+YouCtrl | Origin$ Battlefield | Destination$ Graveyard | TriggerZones$ Battlefield | Execute$ TrigExile | OptionalDecider$ You | TriggerDescription$ Whenever another nontoken creature you control dies, you may pay 2 life and exile it. If you do, create a token that's a copy of that creature, except it's 1/1 and has toxic 1. (Players dealt combat damage by it also get a poison counter.) -SVar:TrigExile:AB$ CopyPermanent | Cost$ PayLife<2> ExileFromGrave<1/Card.TriggeredCard/Exile nontoken creature that just died> | PumpKeywords$ Toxic:1 | Defined$ TriggeredCardLKICopy | SetPower$ 1 | SetToughness$ 1 +SVar:TrigExile:AB$ CopyPermanent | Cost$ PayLife<2> ExileFromGrave<1/Card.TriggeredCard/Exile nontoken creature that just died> | AddKeywords$ Toxic:1 | Defined$ TriggeredCardLKICopy | SetPower$ 1 | SetToughness$ 1 DeckHas:Ability$Token -Oracle:Flying\nWhenever another nontoken creature you control dies, you may pay 2 life and exile it. If you do, create a token that's a copy of that creature, except it's 1/1 and has toxic 1. (Players dealt combat damage by it also get a poison counter.) \ No newline at end of file +Oracle:Flying\nWhenever another nontoken creature you control dies, you may pay 2 life and exile it. If you do, create a token that's a copy of that creature, except it's 1/1 and has toxic 1. (Players dealt combat damage by it also get a poison counter.) diff --git a/forge-gui/res/cardsfolder/w/wave_of_vitriol.txt b/forge-gui/res/cardsfolder/w/wave_of_vitriol.txt index 37d37b40b24..093b3353e5c 100644 --- a/forge-gui/res/cardsfolder/w/wave_of_vitriol.txt +++ b/forge-gui/res/cardsfolder/w/wave_of_vitriol.txt @@ -2,7 +2,7 @@ Name:Wave of Vitriol ManaCost:5 G G Types:Sorcery A:SP$ SacrificeAll | Cost$ 5 G G | ValidCards$ Artifact,Enchantment,Land.nonBasic | RememberSacrificed$ True | SubAbility$ DBRepeat | SpellDescription$ Each player sacrifices all artifacts, enchantments, and nonbasic lands they control. For each land sacrificed this way, its controller may search their library for a basic land card and put it onto the battlefield tapped. Then each player who searched their library this way shuffles. -SVar:DBRepeat:DB$ RepeatEach | DefinedCards$ DirectRemembered | AdditionalRestriction$ Land | UseImprinted$ True | RepeatSubAbility$ DBSearch | ClearRemembered$ True | SubAbility$ DBShuffle +SVar:DBRepeat:DB$ RepeatEach | DefinedCards$ DirectRemembered.Land | UseImprinted$ True | RepeatSubAbility$ DBSearch | ClearRemembered$ True | SubAbility$ DBShuffle SVar:DBSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ 1 | Tapped$ True | RememberChanged$ True | DefinedPlayer$ ImprintedController | Chooser$ ImprintedController | NoShuffle$ True | Optional$ True SVar:DBShuffle:DB$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ ShuffleSearched | SubAbility$ DBCleanup SVar:ShuffleSearched:DB$ Shuffle | Defined$ Player.IsRemembered | ConditionCheckSVar$ X | ConditionSVarCompare$ GE1 diff --git a/forge-gui/res/cardsfolder/z/zopandrel_hunger_dominus.txt b/forge-gui/res/cardsfolder/z/zopandrel_hunger_dominus.txt index de03b3d57e0..1e2bf3c6f08 100644 --- a/forge-gui/res/cardsfolder/z/zopandrel_hunger_dominus.txt +++ b/forge-gui/res/cardsfolder/z/zopandrel_hunger_dominus.txt @@ -6,8 +6,8 @@ K:Reach T:Mode$ Phase | Phase$ BeginCombat | TriggerZones$ Battlefield | Execute$ TrigDouble | TriggerDescription$ At the beginning of each combat, double the power and toughness of each creature you control until end of turn. SVar:TrigDouble:DB$ RepeatEach | RepeatCards$ Creature.YouCtrl | RepeatSubAbility$ DBDouble SVar:DBDouble:DB$ Pump | Defined$ Remembered | NumAtt$ X | NumDef$ Y | Double$ True -A:AB$ PutCounter | Cost$ 1 GP GP Sac<2/Creature.Other/Other creature> | Defined$ Self | CounterType$ Indestructible | CounterNum$ 1 | SpellDescription$ Put an indestructible counter on CARDNAME. ({G/P} can be paid with either {G} or 2 life.) +A:AB$ PutCounter | Cost$ GP GP Sac<2/Creature.Other/Other creature> | Defined$ Self | CounterType$ Indestructible | CounterNum$ 1 | SpellDescription$ Put an indestructible counter on CARDNAME. ({G/P} can be paid with either {G} or 2 life.) SVar:X:Remembered$CardPower SVar:Y:Remembered$CardToughness DeckHas:Ability$Sacrifice|Counters -Oracle:Reach\nAt the beginning of each combat, double the power and toughness of each creature you control until end of turn.\n{G/P}{G/P}, Sacrifice two other creatures: Put an indestructible counter on Zopandrel, Hunger Dominus. ({G/P} can be paid with either {G} or 2 life.) \ No newline at end of file +Oracle:Reach\nAt the beginning of each combat, double the power and toughness of each creature you control until end of turn.\n{G/P}{G/P}, Sacrifice two other creatures: Put an indestructible counter on Zopandrel, Hunger Dominus. ({G/P} can be paid with either {G} or 2 life.) diff --git a/forge-gui/res/editions/Alchemy Dominaria.txt b/forge-gui/res/editions/Alchemy Dominaria.txt index 99e08a648a3..fca98ec9860 100644 --- a/forge-gui/res/editions/Alchemy Dominaria.txt +++ b/forge-gui/res/editions/Alchemy Dominaria.txt @@ -3,6 +3,7 @@ Code=YDMU Date=2022-10-06 Name=Alchemy: Dominaria Type=Online +Booster=1 UncommonRareMythic, 9 Common:fromsheet("DMU cards"), 3 Uncommon:fromSheet("DMU cards"), 1 RareMythic:fromSheet("DMU cards"), 1 fromSheet("DMU lands") ScryfallCode=YDMU [cards] diff --git a/forge-gui/res/editions/Alchemy Kamigawa.txt b/forge-gui/res/editions/Alchemy Kamigawa.txt index 74222a5490a..273459b572f 100644 --- a/forge-gui/res/editions/Alchemy Kamigawa.txt +++ b/forge-gui/res/editions/Alchemy Kamigawa.txt @@ -3,6 +3,7 @@ Code=YNEO Date=2022-03-17 Name=Alchemy: Kamigawa Type=Online +Booster=1 UncommonRareMythic, 8 Common:!dfc:!fromSheet("NEO lands"):fromSheet("NEO cards"), 3 Uncommon:!dfc:!fromSheet("NEO lands"):fromSheet("NEO cards"), 1 dfc:!Rare:!Mythic:fromSheet("NEO cards"), 1 RareMythic:fromSheet("NEO cards"), 1 fromSheet("NEO lands") ScryfallCode=YNEO [cards] diff --git a/forge-gui/res/editions/Alchemy New Capenna.txt b/forge-gui/res/editions/Alchemy New Capenna.txt index 6126887dbd9..24013f3cf49 100644 --- a/forge-gui/res/editions/Alchemy New Capenna.txt +++ b/forge-gui/res/editions/Alchemy New Capenna.txt @@ -3,6 +3,7 @@ Code=YSNC Date=2022-06-02 Name=Alchemy: New Capenna Type=Online +Booster=1 UncommonRareMythic, 9 Common:fromsheet("SNC cards"), 3 Uncommon:fromSheet("SNC cards"), 1 RareMythic:fromSheet("SNC cards"), 1 fromSheet("SNC lands") ScryfallCode=YSNC [cards] diff --git a/forge-gui/res/editions/Alchemy Phyrexia.txt b/forge-gui/res/editions/Alchemy Phyrexia.txt index e0174839e1f..4bba7c821c4 100644 --- a/forge-gui/res/editions/Alchemy Phyrexia.txt +++ b/forge-gui/res/editions/Alchemy Phyrexia.txt @@ -3,6 +3,7 @@ Code=YONE Date=2023-02-28 Name=Alchemy: Phyrexia Type=Online +Booster=1 UncommonRareMythic, 9 Common:fromsheet("ONE cards"), 3 Uncommon:fromSheet("ONE cards"), 1 RareMythic:fromSheet("ONE cards"), 1 BasicLand:fromSheet("ONE cards") ScryfallCode=YONE [cards] diff --git a/forge-gui/res/editions/Alchemy The Brothers War.txt b/forge-gui/res/editions/Alchemy The Brothers War.txt index 9eebb65de85..2c28fea9719 100644 --- a/forge-gui/res/editions/Alchemy The Brothers War.txt +++ b/forge-gui/res/editions/Alchemy The Brothers War.txt @@ -3,6 +3,7 @@ Code=YBRO Date=2022-12-13 Name=Alchemy: The Brothers' War Type=Online +Booster=1 UncommonRareMythic, 8 Common:fromsheet("BRO cards"), 3 Uncommon:fromSheet("BRO cards"), 1 RareMythic:fromSheet("BRO cards"), 1 fromSheet("BRO lands"), 1 fromSheet("BRR cards") ScryfallCode=YBRO [cards]