/**
 * This class file was automatically generated by jASN1 v1.8.0 (http://www.openmuc.org)
 */

package org.onosproject.xran.codecs.api;

import java.io.IOException;
import java.io.EOFException;
import java.io.InputStream;
import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;
import java.io.UnsupportedEncodingException;
import java.math.BigInteger;
import java.io.Serializable;
import org.onosproject.xran.codecs.ber.*;
import org.onosproject.xran.codecs.ber.types.*;
import org.onosproject.xran.codecs.ber.types.string.*;


public class ERABID extends BerInteger {

	private static final long serialVersionUID = 1L;

	public ERABID() {
	}

	public ERABID(byte[] code) {
		super(code);
	}

	public ERABID(BigInteger value) {
		super(value);
	}

	public ERABID(long value) {
		super(value);
	}

	@Override
	public int hashCode() {
		return value.intValue();
	}

	@Override
	public boolean equals(Object obj) {
		if (obj instanceof ERABID) {
			return value.intValue() == ((ERABID) obj).intValue();
		}
		return super.equals(obj);
	}
}
