// Path: commons-eid-client/src/main/java/be/bosa/commons/eid/client/exception/BeIDException.java
// public class BeIDException extends Exception {
// 
// 	public BeIDException() {
// 	}
// 
// 	public BeIDException(String message) {
// 		super(message);
// 	}
// 
// 	public BeIDException(Throwable cause) {
// 		super(cause);
// 	}
// 
// 	public BeIDException(String message, Throwable cause) {
// 		super(message, cause);
// 	}
// }
// 
// Path: commons-eid-client/src/main/java/be/bosa/commons/eid/client/spi/Logger.java
// public interface Logger {
// 
// 	/**
// 	 * Error messages receiver.
// 	 *
// 	 * @param message the error message.
// 	 */
// 	void error(String message);
// 
// 	/**
// 	 * Debug messages receiver.
// 	 *
// 	 * @param message the debug message.
// 	 */
// 	void debug(String message);
// }


import javax.smartcardio.ResponseAPDU;
import be.bosa.commons.eid.client.exception.BeIDException;
import be.bosa.commons.eid.client.spi.Logger;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collection;
import java.util.EnumMap;
import java.util.Locale;
import javax.smartcardio.Card;
import javax.smartcardio.CardException;
import javax.smartcardio.CardTerminal;
import javax.smartcardio.CommandAPDU;
				if (featureCode != null) {
					logger.debug("FEATURE " + feature.name() + " = " + Integer.toHexString(featureCode));
				}
			}
			usesPPDU = true;
		} else {
			logger.error("CCID Features via PPDU Not Supported");
		}
	}

	private Integer findFeaturePPDU(byte featureTag, byte[] features) {
		for (byte tag : features) {
			if (featureTag == tag)
				return (int) tag;
		}
		return null;
	}

	public boolean usesPPDU() {
		return usesPPDU;
	}

	public boolean hasFeature(FEATURE feature) {
		return getFeature(feature) != null;
	}

	public Integer getFeature(FEATURE feature) {
		return features.get(feature);
	}

// Path: commons-eid-client/src/main/java/be/bosa/commons/eid/client/exception/BeIDException.java
// public class BeIDException extends Exception {
// 
// 	public BeIDException() {
// 	}
// 
// 	public BeIDException(String message) {
// 		super(message);
// 	}
// 
// 	public BeIDException(Throwable cause) {
// 		super(cause);
// 	}
// 
// 	public BeIDException(String message, Throwable cause) {
// 		super(message, cause);
// 	}
// }
// 
// Path: commons-eid-client/src/main/java/be/bosa/commons/eid/client/spi/Logger.java
// public interface Logger {
// 
// 	/**
// 	 * Error messages receiver.
// 	 *
// 	 * @param message the error message.
// 	 */
// 	void error(String message);
// 
// 	/**
// 	 * Debug messages receiver.
// 	 *
// 	 * @param message the debug message.
// 	 */
// 	void debug(String message);
// }


// Path: commons-eid-client/src/main/java/be/bosa/commons/eid/client/impl/CCID.java
import javax.smartcardio.ResponseAPDU;
import be.bosa.commons.eid.client.exception.BeIDException;
import be.bosa.commons.eid.client.spi.Logger;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collection;
import java.util.EnumMap;
import java.util.Locale;
import javax.smartcardio.Card;
import javax.smartcardio.CardException;
import javax.smartcardio.CardTerminal;
import javax.smartcardio.CommandAPDU;

				if (featureCode != null) {
					logger.debug("FEATURE " + feature.name() + " = " + Integer.toHexString(featureCode));
				}
			}
			usesPPDU = true;
		} else {
			logger.error("CCID Features via PPDU Not Supported");
		}
	}

	private Integer findFeaturePPDU(byte featureTag, byte[] features) {
		for (byte tag : features) {
			if (featureTag == tag)
				return (int) tag;
		}
		return null;
	}

	public boolean usesPPDU() {
		return usesPPDU;
	}

	public boolean hasFeature(FEATURE feature) {
		return getFeature(feature) != null;
	}

	public Integer getFeature(FEATURE feature) {
		return features.get(feature);
	}

	protected byte[] transmitPPDUCommand(int controlCode, byte[] command) throws CardException, BeIDException {