Program: 112877
Project: 112877
Buggy source:
/** 
 * Use the card on the given target
 * @param thisCardIndex The index (position) of the card in the hand
 * @param playerIndex The index of the target player.  0 if targeting yourself or your own minions, 1 if targeting the enemy
 * @param minionIndex The index of the target minion.
 * @param boardState The BoardState before this card has performed its action.  It will be manipulated and returned.
 * @return The boardState is manipulated and returned
 */
@Override public HearthTreeNode<BoardState> use_core(int thisCardIndex,int playerIndex,int minionIndex,HearthTreeNode<BoardState> boardState,Deck deck){
  if (this.hasBeenUsed()) {
    return null;
  }
  this.hasBeenUsed(true);
  if (minionIndex == 0) {
    if (playerIndex == 0) {
      this.attack(boardState.data_.getHero_p0(),playerIndex,minionIndex,boardState,deck);
    }
 else {
      this.attack(boardState.data_.getHero_p1(),playerIndex,minionIndex,boardState,deck);
    }
    boardState.data_.setMana_p0(boardState.data_.getMana_p0() - this.mana_);
    boardState.data_.removeCard_hand(thisCardIndex);
    return boardState;
  }
 else {
    Minion target=null;
    if (playerIndex == 0) {
      if (boardState.data_.getNumMinions_p0() + 1 > minionIndex)       target=boardState.data_.getMinion_p0(minionIndex - 1);
 else       return null;
    }
 else {
      if (boardState.data_.getNumMinions_p1() + 1 > minionIndex)       target=boardState.data_.getMinion_p1(minionIndex - 1);
 else       return null;
    }
    this.attack(target,playerIndex,minionIndex,boardState,deck);
    boardState.data_.setMana_p0(boardState.data_.getMana_p0() - this.mana_);
    boardState.data_.removeCard_hand(thisCardIndex);
    if (target.getHealth() <= 0) {
      if (playerIndex == 0)       boardState.data_.removeMinion_p0(target);
 else       boardState.data_.removeMinion_p1(target);
    }
    return boardState;
  }
}

Fixed version (ground truth):
/** 
 * Use the card on the given target
 * @param thisCardIndex The index (position) of the card in the hand
 * @param playerIndex The index of the target player.  0 if targeting yourself or your own minions, 1 if targeting the enemy
 * @param minionIndex The index of the target minion.
 * @param boardState The BoardState before this card has performed its action.  It will be manipulated and returned.
 * @return The boardState is manipulated and returned
 */
@Override protected HearthTreeNode<BoardState> use_core(int thisCardIndex,int playerIndex,int minionIndex,HearthTreeNode<BoardState> boardState,Deck deck) throws HSInvalidPlayerIndexException {
  if (this.hasBeenUsed()) {
    return null;
  }
  this.hasBeenUsed(true);
  if (minionIndex == 0) {
    if (playerIndex == 0) {
      this.attack(boardState.data_.getHero_p0(),playerIndex,minionIndex,boardState,deck);
    }
 else {
      this.attack(boardState.data_.getHero_p1(),playerIndex,minionIndex,boardState,deck);
    }
    boardState.data_.setMana_p0(boardState.data_.getMana_p0() - this.mana_);
    boardState.data_.removeCard_hand(thisCardIndex);
    return boardState;
  }
 else {
    Minion target=null;
    if (playerIndex == 0) {
      if (boardState.data_.getNumMinions_p0() + 1 > minionIndex)       target=boardState.data_.getMinion_p0(minionIndex - 1);
 else       return null;
    }
 else {
      if (boardState.data_.getNumMinions_p1() + 1 > minionIndex)       target=boardState.data_.getMinion_p1(minionIndex - 1);
 else       return null;
    }
    this.attack(target,playerIndex,minionIndex,boardState,deck);
    boardState.data_.setMana_p0(boardState.data_.getMana_p0() - this.mana_);
    boardState.data_.removeCard_hand(thisCardIndex);
    if (target.getHealth() <= 0) {
      if (playerIndex == 0)       boardState.data_.removeMinion_p0(target);
 else       boardState.data_.removeMinion_p1(target);
    }
    return boardState;
  }
}