private static void upkeep_Yawgmoth_Demon() {
        /*
		 * At the beginning of your upkeep, you may sacrifice an artifact. If
		 * you don't, tap Yawgmoth Demon and it deals 2 damage to you.
		 */
        final Player player = AllZone.getPhase().getPlayerTurn();
        final CardList cards = AllZoneUtil.getPlayerCardsInPlay(player, "Yawgmoth Demon");

        for (int i = 0; i < cards.size(); i++) {
            final Card c = cards.get(i);

            final Ability sacrificeArtifact = new Ability(c, "") {
                @Override
                public void resolve() {
                    CardList artifacts = AllZoneUtil.getPlayerCardsInPlay(player);
                    artifacts = artifacts.filter(AllZoneUtil.artifacts);

                    if (player.isHuman()) {
                        AllZone.getInputControl().setInput(new Input() {
                            private static final long serialVersionUID = -1698502376924356936L;

                            public void showMessage() {
                                AllZone.getDisplay().showMessage("Yawgmoth Demon - Select one artifact to sacrifice or be dealt 2 damage");
                                ButtonUtil.enableOnlyCancel();
                            }

                            public void selectButtonCancel() {
                                tapAndDamage(player);
                                stop();
                            }

                            public void selectCard(Card artifact, PlayerZone zone) {
                                //probably need to restrict by controller also
                                if (artifact.isArtifact() && zone.is(Constant.Zone.Battlefield)
                                        && zone.getPlayer().isHuman()) {
                                    AllZone.getGameAction().sacrifice(artifact);
                                    stop();
                                }
                            }//selectCard()
                        });//Input
                    } else { //computer
                        Card target = CardFactoryUtil.AI_getCheapestPermanent(artifacts, c, false);
                        if (null == target) {
                            tapAndDamage(player);
                        } else AllZone.getGameAction().sacrifice(target);
                    }
                }//resolve

                private void tapAndDamage(Player player) {
                    c.tap();
                    player.addDamage(2, c);
                }
            };

            StringBuilder sb = new StringBuilder();
            sb.append(c.getName()).append(" - sacrifice an artifact or ");
            sb.append(c.getName()).append(" becomes tapped and deals 2 damage to you.");
            sacrificeArtifact.setStackDescription(sb.toString());

            AllZone.getStack().addSimultaneousStackEntry(sacrificeArtifact);

        }//end for
    }