/**
 * <copyright>
 * </copyright>
 *
 * $Id$
 */
package org.eclipse.stem.diseasemodels.vector.impl;

import org.eclipse.emf.common.notify.Notification;

import org.eclipse.emf.ecore.EClass;

import org.eclipse.emf.ecore.impl.ENotificationImpl;

import org.eclipse.stem.diseasemodels.standard.impl.StandardDiseaseModelLabelValueImpl;

import org.eclipse.stem.diseasemodels.vector.DengueModelHostLabelValue;
import org.eclipse.stem.diseasemodels.vector.VectorPackage;

/**
 * <!-- begin-user-doc -->
 * An implementation of the model object '<em><b>Dengue Model Host Label Value</b></em>'.
 * <!-- end-user-doc -->
 * <p>
 * The following features are implemented:
 * <ul>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getE1 <em>E1</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getE2 <em>E2</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getE3 <em>E3</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getE4 <em>E4</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getI1 <em>I1</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getI2 <em>I2</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getI3 <em>I3</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getI4 <em>I4</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getT1 <em>T1</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getT2 <em>T2</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getT3 <em>T3</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getT4 <em>T4</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getR1 <em>R1</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getR2 <em>R2</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getR3 <em>R3</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getR4 <em>R4</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getE12 <em>E12</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getE13 <em>E13</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getE14 <em>E14</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getE21 <em>E21</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getE23 <em>E23</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getE24 <em>E24</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getE31 <em>E31</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getE32 <em>E32</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getE34 <em>E34</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getE41 <em>E41</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getE42 <em>E42</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getE43 <em>E43</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getI12 <em>I12</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getI13 <em>I13</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getI14 <em>I14</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getI21 <em>I21</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getI23 <em>I23</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getI24 <em>I24</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getI31 <em>I31</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getI32 <em>I32</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getI34 <em>I34</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getI41 <em>I41</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getI42 <em>I42</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getI43 <em>I43</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getR <em>R</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getIncidence1 <em>Incidence1</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getIncidence2 <em>Incidence2</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getIncidence3 <em>Incidence3</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getIncidence4 <em>Incidence4</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getIncidence12 <em>Incidence12</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getIncidence21 <em>Incidence21</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getIncidence31 <em>Incidence31</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getIncidence41 <em>Incidence41</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getIncidence13 <em>Incidence13</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getIncidence23 <em>Incidence23</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getIncidence32 <em>Incidence32</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getIncidence42 <em>Incidence42</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getIncidence14 <em>Incidence14</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getIncidence24 <em>Incidence24</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getIncidence34 <em>Incidence34</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getIncidence43 <em>Incidence43</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getDeaths1 <em>Deaths1</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getDeaths2 <em>Deaths2</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getDeaths3 <em>Deaths3</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getDeaths4 <em>Deaths4</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getDeaths12 <em>Deaths12</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getDeaths21 <em>Deaths21</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getDeaths31 <em>Deaths31</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getDeaths41 <em>Deaths41</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getDeaths13 <em>Deaths13</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getDeaths23 <em>Deaths23</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getDeaths32 <em>Deaths32</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getDeaths42 <em>Deaths42</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getDeaths14 <em>Deaths14</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getDeaths24 <em>Deaths24</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getDeaths34 <em>Deaths34</em>}</li>
 *   <li>{@link org.eclipse.stem.diseasemodels.vector.impl.DengueModelHostLabelValueImpl#getDeaths43 <em>Deaths43</em>}</li>
 * </ul>
 * </p>
 *
 * @generated
 */
public class DengueModelHostLabelValueImpl extends StandardDiseaseModelLabelValueImpl implements DengueModelHostLabelValue {
	/**
	 * The default value of the '{@link #getE1() <em>E1</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getE1()
	 * @generated
	 * @ordered
	 */
	protected static final double E1_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getE1() <em>E1</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getE1()
	 * @generated
	 * @ordered
	 */
	protected double e1 = E1_EDEFAULT;

	/**
	 * The default value of the '{@link #getE2() <em>E2</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getE2()
	 * @generated
	 * @ordered
	 */
	protected static final double E2_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getE2() <em>E2</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getE2()
	 * @generated
	 * @ordered
	 */
	protected double e2 = E2_EDEFAULT;

	/**
	 * The default value of the '{@link #getE3() <em>E3</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getE3()
	 * @generated
	 * @ordered
	 */
	protected static final double E3_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getE3() <em>E3</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getE3()
	 * @generated
	 * @ordered
	 */
	protected double e3 = E3_EDEFAULT;

	/**
	 * The default value of the '{@link #getE4() <em>E4</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getE4()
	 * @generated
	 * @ordered
	 */
	protected static final double E4_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getE4() <em>E4</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getE4()
	 * @generated
	 * @ordered
	 */
	protected double e4 = E4_EDEFAULT;

	/**
	 * The default value of the '{@link #getI1() <em>I1</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getI1()
	 * @generated
	 * @ordered
	 */
	protected static final double I1_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getI1() <em>I1</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getI1()
	 * @generated
	 * @ordered
	 */
	protected double i1 = I1_EDEFAULT;

	/**
	 * The default value of the '{@link #getI2() <em>I2</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getI2()
	 * @generated
	 * @ordered
	 */
	protected static final double I2_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getI2() <em>I2</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getI2()
	 * @generated
	 * @ordered
	 */
	protected double i2 = I2_EDEFAULT;

	/**
	 * The default value of the '{@link #getI3() <em>I3</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getI3()
	 * @generated
	 * @ordered
	 */
	protected static final double I3_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getI3() <em>I3</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getI3()
	 * @generated
	 * @ordered
	 */
	protected double i3 = I3_EDEFAULT;

	/**
	 * The default value of the '{@link #getI4() <em>I4</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getI4()
	 * @generated
	 * @ordered
	 */
	protected static final double I4_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getI4() <em>I4</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getI4()
	 * @generated
	 * @ordered
	 */
	protected double i4 = I4_EDEFAULT;

	/**
	 * The default value of the '{@link #getT1() <em>T1</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getT1()
	 * @generated
	 * @ordered
	 */
	protected static final double T1_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getT1() <em>T1</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getT1()
	 * @generated
	 * @ordered
	 */
	protected double t1 = T1_EDEFAULT;

	/**
	 * The default value of the '{@link #getT2() <em>T2</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getT2()
	 * @generated
	 * @ordered
	 */
	protected static final double T2_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getT2() <em>T2</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getT2()
	 * @generated
	 * @ordered
	 */
	protected double t2 = T2_EDEFAULT;

	/**
	 * The default value of the '{@link #getT3() <em>T3</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getT3()
	 * @generated
	 * @ordered
	 */
	protected static final double T3_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getT3() <em>T3</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getT3()
	 * @generated
	 * @ordered
	 */
	protected double t3 = T3_EDEFAULT;

	/**
	 * The default value of the '{@link #getT4() <em>T4</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getT4()
	 * @generated
	 * @ordered
	 */
	protected static final double T4_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getT4() <em>T4</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getT4()
	 * @generated
	 * @ordered
	 */
	protected double t4 = T4_EDEFAULT;

	/**
	 * The default value of the '{@link #getR1() <em>R1</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getR1()
	 * @generated
	 * @ordered
	 */
	protected static final double R1_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getR1() <em>R1</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getR1()
	 * @generated
	 * @ordered
	 */
	protected double r1 = R1_EDEFAULT;

	/**
	 * The default value of the '{@link #getR2() <em>R2</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getR2()
	 * @generated
	 * @ordered
	 */
	protected static final double R2_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getR2() <em>R2</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getR2()
	 * @generated
	 * @ordered
	 */
	protected double r2 = R2_EDEFAULT;

	/**
	 * The default value of the '{@link #getR3() <em>R3</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getR3()
	 * @generated
	 * @ordered
	 */
	protected static final double R3_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getR3() <em>R3</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getR3()
	 * @generated
	 * @ordered
	 */
	protected double r3 = R3_EDEFAULT;

	/**
	 * The default value of the '{@link #getR4() <em>R4</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getR4()
	 * @generated
	 * @ordered
	 */
	protected static final double R4_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getR4() <em>R4</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getR4()
	 * @generated
	 * @ordered
	 */
	protected double r4 = R4_EDEFAULT;

	/**
	 * The default value of the '{@link #getE12() <em>E12</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getE12()
	 * @generated
	 * @ordered
	 */
	protected static final double E12_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getE12() <em>E12</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getE12()
	 * @generated
	 * @ordered
	 */
	protected double e12 = E12_EDEFAULT;

	/**
	 * The default value of the '{@link #getE13() <em>E13</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getE13()
	 * @generated
	 * @ordered
	 */
	protected static final double E13_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getE13() <em>E13</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getE13()
	 * @generated
	 * @ordered
	 */
	protected double e13 = E13_EDEFAULT;

	/**
	 * The default value of the '{@link #getE14() <em>E14</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getE14()
	 * @generated
	 * @ordered
	 */
	protected static final double E14_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getE14() <em>E14</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getE14()
	 * @generated
	 * @ordered
	 */
	protected double e14 = E14_EDEFAULT;

	/**
	 * The default value of the '{@link #getE21() <em>E21</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getE21()
	 * @generated
	 * @ordered
	 */
	protected static final double E21_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getE21() <em>E21</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getE21()
	 * @generated
	 * @ordered
	 */
	protected double e21 = E21_EDEFAULT;

	/**
	 * The default value of the '{@link #getE23() <em>E23</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getE23()
	 * @generated
	 * @ordered
	 */
	protected static final double E23_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getE23() <em>E23</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getE23()
	 * @generated
	 * @ordered
	 */
	protected double e23 = E23_EDEFAULT;

	/**
	 * The default value of the '{@link #getE24() <em>E24</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getE24()
	 * @generated
	 * @ordered
	 */
	protected static final double E24_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getE24() <em>E24</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getE24()
	 * @generated
	 * @ordered
	 */
	protected double e24 = E24_EDEFAULT;

	/**
	 * The default value of the '{@link #getE31() <em>E31</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getE31()
	 * @generated
	 * @ordered
	 */
	protected static final double E31_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getE31() <em>E31</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getE31()
	 * @generated
	 * @ordered
	 */
	protected double e31 = E31_EDEFAULT;

	/**
	 * The default value of the '{@link #getE32() <em>E32</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getE32()
	 * @generated
	 * @ordered
	 */
	protected static final double E32_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getE32() <em>E32</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getE32()
	 * @generated
	 * @ordered
	 */
	protected double e32 = E32_EDEFAULT;

	/**
	 * The default value of the '{@link #getE34() <em>E34</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getE34()
	 * @generated
	 * @ordered
	 */
	protected static final double E34_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getE34() <em>E34</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getE34()
	 * @generated
	 * @ordered
	 */
	protected double e34 = E34_EDEFAULT;

	/**
	 * The default value of the '{@link #getE41() <em>E41</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getE41()
	 * @generated
	 * @ordered
	 */
	protected static final double E41_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getE41() <em>E41</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getE41()
	 * @generated
	 * @ordered
	 */
	protected double e41 = E41_EDEFAULT;

	/**
	 * The default value of the '{@link #getE42() <em>E42</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getE42()
	 * @generated
	 * @ordered
	 */
	protected static final double E42_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getE42() <em>E42</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getE42()
	 * @generated
	 * @ordered
	 */
	protected double e42 = E42_EDEFAULT;

	/**
	 * The default value of the '{@link #getE43() <em>E43</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getE43()
	 * @generated
	 * @ordered
	 */
	protected static final double E43_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getE43() <em>E43</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getE43()
	 * @generated
	 * @ordered
	 */
	protected double e43 = E43_EDEFAULT;

	/**
	 * The default value of the '{@link #getI12() <em>I12</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getI12()
	 * @generated
	 * @ordered
	 */
	protected static final double I12_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getI12() <em>I12</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getI12()
	 * @generated
	 * @ordered
	 */
	protected double i12 = I12_EDEFAULT;

	/**
	 * The default value of the '{@link #getI13() <em>I13</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getI13()
	 * @generated
	 * @ordered
	 */
	protected static final double I13_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getI13() <em>I13</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getI13()
	 * @generated
	 * @ordered
	 */
	protected double i13 = I13_EDEFAULT;

	/**
	 * The default value of the '{@link #getI14() <em>I14</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getI14()
	 * @generated
	 * @ordered
	 */
	protected static final double I14_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getI14() <em>I14</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getI14()
	 * @generated
	 * @ordered
	 */
	protected double i14 = I14_EDEFAULT;

	/**
	 * The default value of the '{@link #getI21() <em>I21</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getI21()
	 * @generated
	 * @ordered
	 */
	protected static final double I21_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getI21() <em>I21</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getI21()
	 * @generated
	 * @ordered
	 */
	protected double i21 = I21_EDEFAULT;

	/**
	 * The default value of the '{@link #getI23() <em>I23</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getI23()
	 * @generated
	 * @ordered
	 */
	protected static final double I23_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getI23() <em>I23</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getI23()
	 * @generated
	 * @ordered
	 */
	protected double i23 = I23_EDEFAULT;

	/**
	 * The default value of the '{@link #getI24() <em>I24</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getI24()
	 * @generated
	 * @ordered
	 */
	protected static final double I24_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getI24() <em>I24</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getI24()
	 * @generated
	 * @ordered
	 */
	protected double i24 = I24_EDEFAULT;

	/**
	 * The default value of the '{@link #getI31() <em>I31</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getI31()
	 * @generated
	 * @ordered
	 */
	protected static final double I31_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getI31() <em>I31</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getI31()
	 * @generated
	 * @ordered
	 */
	protected double i31 = I31_EDEFAULT;

	/**
	 * The default value of the '{@link #getI32() <em>I32</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getI32()
	 * @generated
	 * @ordered
	 */
	protected static final double I32_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getI32() <em>I32</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getI32()
	 * @generated
	 * @ordered
	 */
	protected double i32 = I32_EDEFAULT;

	/**
	 * The default value of the '{@link #getI34() <em>I34</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getI34()
	 * @generated
	 * @ordered
	 */
	protected static final double I34_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getI34() <em>I34</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getI34()
	 * @generated
	 * @ordered
	 */
	protected double i34 = I34_EDEFAULT;

	/**
	 * The default value of the '{@link #getI41() <em>I41</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getI41()
	 * @generated
	 * @ordered
	 */
	protected static final double I41_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getI41() <em>I41</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getI41()
	 * @generated
	 * @ordered
	 */
	protected double i41 = I41_EDEFAULT;

	/**
	 * The default value of the '{@link #getI42() <em>I42</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getI42()
	 * @generated
	 * @ordered
	 */
	protected static final double I42_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getI42() <em>I42</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getI42()
	 * @generated
	 * @ordered
	 */
	protected double i42 = I42_EDEFAULT;

	/**
	 * The default value of the '{@link #getI43() <em>I43</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getI43()
	 * @generated
	 * @ordered
	 */
	protected static final double I43_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getI43() <em>I43</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getI43()
	 * @generated
	 * @ordered
	 */
	protected double i43 = I43_EDEFAULT;

	/**
	 * The default value of the '{@link #getR() <em>R</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getR()
	 * @generated
	 * @ordered
	 */
	protected static final double R_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getR() <em>R</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getR()
	 * @generated
	 * @ordered
	 */
	protected double r = R_EDEFAULT;

	/**
	 * The default value of the '{@link #getIncidence1() <em>Incidence1</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getIncidence1()
	 * @generated
	 * @ordered
	 */
	protected static final double INCIDENCE1_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getIncidence1() <em>Incidence1</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getIncidence1()
	 * @generated
	 * @ordered
	 */
	protected double incidence1 = INCIDENCE1_EDEFAULT;

	/**
	 * The default value of the '{@link #getIncidence2() <em>Incidence2</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getIncidence2()
	 * @generated
	 * @ordered
	 */
	protected static final double INCIDENCE2_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getIncidence2() <em>Incidence2</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getIncidence2()
	 * @generated
	 * @ordered
	 */
	protected double incidence2 = INCIDENCE2_EDEFAULT;

	/**
	 * The default value of the '{@link #getIncidence3() <em>Incidence3</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getIncidence3()
	 * @generated
	 * @ordered
	 */
	protected static final double INCIDENCE3_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getIncidence3() <em>Incidence3</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getIncidence3()
	 * @generated
	 * @ordered
	 */
	protected double incidence3 = INCIDENCE3_EDEFAULT;

	/**
	 * The default value of the '{@link #getIncidence4() <em>Incidence4</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getIncidence4()
	 * @generated
	 * @ordered
	 */
	protected static final double INCIDENCE4_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getIncidence4() <em>Incidence4</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getIncidence4()
	 * @generated
	 * @ordered
	 */
	protected double incidence4 = INCIDENCE4_EDEFAULT;

	/**
	 * The default value of the '{@link #getIncidence12() <em>Incidence12</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getIncidence12()
	 * @generated
	 * @ordered
	 */
	protected static final double INCIDENCE12_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getIncidence12() <em>Incidence12</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getIncidence12()
	 * @generated
	 * @ordered
	 */
	protected double incidence12 = INCIDENCE12_EDEFAULT;

	/**
	 * The default value of the '{@link #getIncidence21() <em>Incidence21</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getIncidence21()
	 * @generated
	 * @ordered
	 */
	protected static final double INCIDENCE21_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getIncidence21() <em>Incidence21</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getIncidence21()
	 * @generated
	 * @ordered
	 */
	protected double incidence21 = INCIDENCE21_EDEFAULT;

	/**
	 * The default value of the '{@link #getIncidence31() <em>Incidence31</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getIncidence31()
	 * @generated
	 * @ordered
	 */
	protected static final double INCIDENCE31_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getIncidence31() <em>Incidence31</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getIncidence31()
	 * @generated
	 * @ordered
	 */
	protected double incidence31 = INCIDENCE31_EDEFAULT;

	/**
	 * The default value of the '{@link #getIncidence41() <em>Incidence41</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getIncidence41()
	 * @generated
	 * @ordered
	 */
	protected static final double INCIDENCE41_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getIncidence41() <em>Incidence41</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getIncidence41()
	 * @generated
	 * @ordered
	 */
	protected double incidence41 = INCIDENCE41_EDEFAULT;

	/**
	 * The default value of the '{@link #getIncidence13() <em>Incidence13</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getIncidence13()
	 * @generated
	 * @ordered
	 */
	protected static final double INCIDENCE13_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getIncidence13() <em>Incidence13</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getIncidence13()
	 * @generated
	 * @ordered
	 */
	protected double incidence13 = INCIDENCE13_EDEFAULT;

	/**
	 * The default value of the '{@link #getIncidence23() <em>Incidence23</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getIncidence23()
	 * @generated
	 * @ordered
	 */
	protected static final double INCIDENCE23_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getIncidence23() <em>Incidence23</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getIncidence23()
	 * @generated
	 * @ordered
	 */
	protected double incidence23 = INCIDENCE23_EDEFAULT;

	/**
	 * The default value of the '{@link #getIncidence32() <em>Incidence32</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getIncidence32()
	 * @generated
	 * @ordered
	 */
	protected static final double INCIDENCE32_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getIncidence32() <em>Incidence32</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getIncidence32()
	 * @generated
	 * @ordered
	 */
	protected double incidence32 = INCIDENCE32_EDEFAULT;

	/**
	 * The default value of the '{@link #getIncidence42() <em>Incidence42</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getIncidence42()
	 * @generated
	 * @ordered
	 */
	protected static final double INCIDENCE42_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getIncidence42() <em>Incidence42</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getIncidence42()
	 * @generated
	 * @ordered
	 */
	protected double incidence42 = INCIDENCE42_EDEFAULT;

	/**
	 * The default value of the '{@link #getIncidence14() <em>Incidence14</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getIncidence14()
	 * @generated
	 * @ordered
	 */
	protected static final double INCIDENCE14_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getIncidence14() <em>Incidence14</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getIncidence14()
	 * @generated
	 * @ordered
	 */
	protected double incidence14 = INCIDENCE14_EDEFAULT;

	/**
	 * The default value of the '{@link #getIncidence24() <em>Incidence24</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getIncidence24()
	 * @generated
	 * @ordered
	 */
	protected static final double INCIDENCE24_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getIncidence24() <em>Incidence24</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getIncidence24()
	 * @generated
	 * @ordered
	 */
	protected double incidence24 = INCIDENCE24_EDEFAULT;

	/**
	 * The default value of the '{@link #getIncidence34() <em>Incidence34</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getIncidence34()
	 * @generated
	 * @ordered
	 */
	protected static final double INCIDENCE34_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getIncidence34() <em>Incidence34</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getIncidence34()
	 * @generated
	 * @ordered
	 */
	protected double incidence34 = INCIDENCE34_EDEFAULT;

	/**
	 * The default value of the '{@link #getIncidence43() <em>Incidence43</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getIncidence43()
	 * @generated
	 * @ordered
	 */
	protected static final double INCIDENCE43_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getIncidence43() <em>Incidence43</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getIncidence43()
	 * @generated
	 * @ordered
	 */
	protected double incidence43 = INCIDENCE43_EDEFAULT;

	/**
	 * The default value of the '{@link #getDeaths1() <em>Deaths1</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDeaths1()
	 * @generated
	 * @ordered
	 */
	protected static final double DEATHS1_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getDeaths1() <em>Deaths1</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDeaths1()
	 * @generated
	 * @ordered
	 */
	protected double deaths1 = DEATHS1_EDEFAULT;

	/**
	 * The default value of the '{@link #getDeaths2() <em>Deaths2</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDeaths2()
	 * @generated
	 * @ordered
	 */
	protected static final double DEATHS2_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getDeaths2() <em>Deaths2</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDeaths2()
	 * @generated
	 * @ordered
	 */
	protected double deaths2 = DEATHS2_EDEFAULT;

	/**
	 * The default value of the '{@link #getDeaths3() <em>Deaths3</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDeaths3()
	 * @generated
	 * @ordered
	 */
	protected static final double DEATHS3_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getDeaths3() <em>Deaths3</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDeaths3()
	 * @generated
	 * @ordered
	 */
	protected double deaths3 = DEATHS3_EDEFAULT;

	/**
	 * The default value of the '{@link #getDeaths4() <em>Deaths4</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDeaths4()
	 * @generated
	 * @ordered
	 */
	protected static final double DEATHS4_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getDeaths4() <em>Deaths4</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDeaths4()
	 * @generated
	 * @ordered
	 */
	protected double deaths4 = DEATHS4_EDEFAULT;

	/**
	 * The default value of the '{@link #getDeaths12() <em>Deaths12</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDeaths12()
	 * @generated
	 * @ordered
	 */
	protected static final double DEATHS12_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getDeaths12() <em>Deaths12</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDeaths12()
	 * @generated
	 * @ordered
	 */
	protected double deaths12 = DEATHS12_EDEFAULT;

	/**
	 * The default value of the '{@link #getDeaths21() <em>Deaths21</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDeaths21()
	 * @generated
	 * @ordered
	 */
	protected static final double DEATHS21_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getDeaths21() <em>Deaths21</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDeaths21()
	 * @generated
	 * @ordered
	 */
	protected double deaths21 = DEATHS21_EDEFAULT;

	/**
	 * The default value of the '{@link #getDeaths31() <em>Deaths31</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDeaths31()
	 * @generated
	 * @ordered
	 */
	protected static final double DEATHS31_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getDeaths31() <em>Deaths31</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDeaths31()
	 * @generated
	 * @ordered
	 */
	protected double deaths31 = DEATHS31_EDEFAULT;

	/**
	 * The default value of the '{@link #getDeaths41() <em>Deaths41</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDeaths41()
	 * @generated
	 * @ordered
	 */
	protected static final double DEATHS41_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getDeaths41() <em>Deaths41</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDeaths41()
	 * @generated
	 * @ordered
	 */
	protected double deaths41 = DEATHS41_EDEFAULT;

	/**
	 * The default value of the '{@link #getDeaths13() <em>Deaths13</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDeaths13()
	 * @generated
	 * @ordered
	 */
	protected static final double DEATHS13_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getDeaths13() <em>Deaths13</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDeaths13()
	 * @generated
	 * @ordered
	 */
	protected double deaths13 = DEATHS13_EDEFAULT;

	/**
	 * The default value of the '{@link #getDeaths23() <em>Deaths23</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDeaths23()
	 * @generated
	 * @ordered
	 */
	protected static final double DEATHS23_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getDeaths23() <em>Deaths23</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDeaths23()
	 * @generated
	 * @ordered
	 */
	protected double deaths23 = DEATHS23_EDEFAULT;

	/**
	 * The default value of the '{@link #getDeaths32() <em>Deaths32</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDeaths32()
	 * @generated
	 * @ordered
	 */
	protected static final double DEATHS32_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getDeaths32() <em>Deaths32</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDeaths32()
	 * @generated
	 * @ordered
	 */
	protected double deaths32 = DEATHS32_EDEFAULT;

	/**
	 * The default value of the '{@link #getDeaths42() <em>Deaths42</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDeaths42()
	 * @generated
	 * @ordered
	 */
	protected static final double DEATHS42_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getDeaths42() <em>Deaths42</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDeaths42()
	 * @generated
	 * @ordered
	 */
	protected double deaths42 = DEATHS42_EDEFAULT;

	/**
	 * The default value of the '{@link #getDeaths14() <em>Deaths14</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDeaths14()
	 * @generated
	 * @ordered
	 */
	protected static final double DEATHS14_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getDeaths14() <em>Deaths14</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDeaths14()
	 * @generated
	 * @ordered
	 */
	protected double deaths14 = DEATHS14_EDEFAULT;

	/**
	 * The default value of the '{@link #getDeaths24() <em>Deaths24</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDeaths24()
	 * @generated
	 * @ordered
	 */
	protected static final double DEATHS24_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getDeaths24() <em>Deaths24</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDeaths24()
	 * @generated
	 * @ordered
	 */
	protected double deaths24 = DEATHS24_EDEFAULT;

	/**
	 * The default value of the '{@link #getDeaths34() <em>Deaths34</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDeaths34()
	 * @generated
	 * @ordered
	 */
	protected static final double DEATHS34_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getDeaths34() <em>Deaths34</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDeaths34()
	 * @generated
	 * @ordered
	 */
	protected double deaths34 = DEATHS34_EDEFAULT;

	/**
	 * The default value of the '{@link #getDeaths43() <em>Deaths43</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDeaths43()
	 * @generated
	 * @ordered
	 */
	protected static final double DEATHS43_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getDeaths43() <em>Deaths43</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDeaths43()
	 * @generated
	 * @ordered
	 */
	protected double deaths43 = DEATHS43_EDEFAULT;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected DengueModelHostLabelValueImpl() {
		super();
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	protected EClass eStaticClass() {
		return VectorPackage.Literals.DENGUE_MODEL_HOST_LABEL_VALUE;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getE1() {
		return e1;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setE1(double newE1) {
		double oldE1 = e1;
		e1 = newE1;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E1, oldE1, e1));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getE2() {
		return e2;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setE2(double newE2) {
		double oldE2 = e2;
		e2 = newE2;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E2, oldE2, e2));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getE3() {
		return e3;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setE3(double newE3) {
		double oldE3 = e3;
		e3 = newE3;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E3, oldE3, e3));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getE4() {
		return e4;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setE4(double newE4) {
		double oldE4 = e4;
		e4 = newE4;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E4, oldE4, e4));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getI1() {
		return i1;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setI1(double newI1) {
		double oldI1 = i1;
		i1 = newI1;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I1, oldI1, i1));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getI2() {
		return i2;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setI2(double newI2) {
		double oldI2 = i2;
		i2 = newI2;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I2, oldI2, i2));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getI3() {
		return i3;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setI3(double newI3) {
		double oldI3 = i3;
		i3 = newI3;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I3, oldI3, i3));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getI4() {
		return i4;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setI4(double newI4) {
		double oldI4 = i4;
		i4 = newI4;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I4, oldI4, i4));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getT1() {
		return t1;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setT1(double newT1) {
		double oldT1 = t1;
		t1 = newT1;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__T1, oldT1, t1));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getT2() {
		return t2;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setT2(double newT2) {
		double oldT2 = t2;
		t2 = newT2;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__T2, oldT2, t2));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getT3() {
		return t3;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setT3(double newT3) {
		double oldT3 = t3;
		t3 = newT3;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__T3, oldT3, t3));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getT4() {
		return t4;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setT4(double newT4) {
		double oldT4 = t4;
		t4 = newT4;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__T4, oldT4, t4));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getR1() {
		return r1;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setR1(double newR1) {
		double oldR1 = r1;
		r1 = newR1;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__R1, oldR1, r1));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getR2() {
		return r2;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setR2(double newR2) {
		double oldR2 = r2;
		r2 = newR2;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__R2, oldR2, r2));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getR3() {
		return r3;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setR3(double newR3) {
		double oldR3 = r3;
		r3 = newR3;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__R3, oldR3, r3));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getR4() {
		return r4;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setR4(double newR4) {
		double oldR4 = r4;
		r4 = newR4;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__R4, oldR4, r4));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getE12() {
		return e12;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setE12(double newE12) {
		double oldE12 = e12;
		e12 = newE12;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E12, oldE12, e12));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getE13() {
		return e13;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setE13(double newE13) {
		double oldE13 = e13;
		e13 = newE13;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E13, oldE13, e13));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getE14() {
		return e14;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setE14(double newE14) {
		double oldE14 = e14;
		e14 = newE14;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E14, oldE14, e14));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getE21() {
		return e21;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setE21(double newE21) {
		double oldE21 = e21;
		e21 = newE21;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E21, oldE21, e21));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getE23() {
		return e23;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setE23(double newE23) {
		double oldE23 = e23;
		e23 = newE23;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E23, oldE23, e23));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getE24() {
		return e24;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setE24(double newE24) {
		double oldE24 = e24;
		e24 = newE24;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E24, oldE24, e24));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getE31() {
		return e31;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setE31(double newE31) {
		double oldE31 = e31;
		e31 = newE31;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E31, oldE31, e31));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getE32() {
		return e32;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setE32(double newE32) {
		double oldE32 = e32;
		e32 = newE32;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E32, oldE32, e32));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getE34() {
		return e34;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setE34(double newE34) {
		double oldE34 = e34;
		e34 = newE34;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E34, oldE34, e34));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getE41() {
		return e41;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setE41(double newE41) {
		double oldE41 = e41;
		e41 = newE41;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E41, oldE41, e41));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getE42() {
		return e42;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setE42(double newE42) {
		double oldE42 = e42;
		e42 = newE42;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E42, oldE42, e42));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getE43() {
		return e43;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setE43(double newE43) {
		double oldE43 = e43;
		e43 = newE43;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E43, oldE43, e43));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getI12() {
		return i12;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setI12(double newI12) {
		double oldI12 = i12;
		i12 = newI12;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I12, oldI12, i12));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getI13() {
		return i13;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setI13(double newI13) {
		double oldI13 = i13;
		i13 = newI13;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I13, oldI13, i13));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getI14() {
		return i14;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setI14(double newI14) {
		double oldI14 = i14;
		i14 = newI14;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I14, oldI14, i14));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getI21() {
		return i21;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setI21(double newI21) {
		double oldI21 = i21;
		i21 = newI21;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I21, oldI21, i21));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getI23() {
		return i23;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setI23(double newI23) {
		double oldI23 = i23;
		i23 = newI23;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I23, oldI23, i23));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getI24() {
		return i24;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setI24(double newI24) {
		double oldI24 = i24;
		i24 = newI24;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I24, oldI24, i24));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getI31() {
		return i31;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setI31(double newI31) {
		double oldI31 = i31;
		i31 = newI31;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I31, oldI31, i31));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getI32() {
		return i32;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setI32(double newI32) {
		double oldI32 = i32;
		i32 = newI32;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I32, oldI32, i32));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getI34() {
		return i34;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setI34(double newI34) {
		double oldI34 = i34;
		i34 = newI34;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I34, oldI34, i34));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getI41() {
		return i41;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setI41(double newI41) {
		double oldI41 = i41;
		i41 = newI41;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I41, oldI41, i41));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getI42() {
		return i42;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setI42(double newI42) {
		double oldI42 = i42;
		i42 = newI42;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I42, oldI42, i42));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getI43() {
		return i43;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setI43(double newI43) {
		double oldI43 = i43;
		i43 = newI43;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I43, oldI43, i43));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getR() {
		return r;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setR(double newR) {
		double oldR = r;
		r = newR;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__R, oldR, r));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getIncidence1() {
		return incidence1;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setIncidence1(double newIncidence1) {
		double oldIncidence1 = incidence1;
		incidence1 = newIncidence1;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE1, oldIncidence1, incidence1));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getIncidence2() {
		return incidence2;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setIncidence2(double newIncidence2) {
		double oldIncidence2 = incidence2;
		incidence2 = newIncidence2;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE2, oldIncidence2, incidence2));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getIncidence3() {
		return incidence3;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setIncidence3(double newIncidence3) {
		double oldIncidence3 = incidence3;
		incidence3 = newIncidence3;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE3, oldIncidence3, incidence3));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getIncidence4() {
		return incidence4;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setIncidence4(double newIncidence4) {
		double oldIncidence4 = incidence4;
		incidence4 = newIncidence4;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE4, oldIncidence4, incidence4));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getIncidence12() {
		return incidence12;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setIncidence12(double newIncidence12) {
		double oldIncidence12 = incidence12;
		incidence12 = newIncidence12;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE12, oldIncidence12, incidence12));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getIncidence21() {
		return incidence21;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setIncidence21(double newIncidence21) {
		double oldIncidence21 = incidence21;
		incidence21 = newIncidence21;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE21, oldIncidence21, incidence21));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getIncidence31() {
		return incidence31;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setIncidence31(double newIncidence31) {
		double oldIncidence31 = incidence31;
		incidence31 = newIncidence31;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE31, oldIncidence31, incidence31));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getIncidence41() {
		return incidence41;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setIncidence41(double newIncidence41) {
		double oldIncidence41 = incidence41;
		incidence41 = newIncidence41;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE41, oldIncidence41, incidence41));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getIncidence13() {
		return incidence13;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setIncidence13(double newIncidence13) {
		double oldIncidence13 = incidence13;
		incidence13 = newIncidence13;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE13, oldIncidence13, incidence13));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getIncidence23() {
		return incidence23;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setIncidence23(double newIncidence23) {
		double oldIncidence23 = incidence23;
		incidence23 = newIncidence23;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE23, oldIncidence23, incidence23));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getIncidence32() {
		return incidence32;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setIncidence32(double newIncidence32) {
		double oldIncidence32 = incidence32;
		incidence32 = newIncidence32;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE32, oldIncidence32, incidence32));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getIncidence42() {
		return incidence42;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setIncidence42(double newIncidence42) {
		double oldIncidence42 = incidence42;
		incidence42 = newIncidence42;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE42, oldIncidence42, incidence42));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getIncidence14() {
		return incidence14;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setIncidence14(double newIncidence14) {
		double oldIncidence14 = incidence14;
		incidence14 = newIncidence14;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE14, oldIncidence14, incidence14));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getIncidence24() {
		return incidence24;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setIncidence24(double newIncidence24) {
		double oldIncidence24 = incidence24;
		incidence24 = newIncidence24;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE24, oldIncidence24, incidence24));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getIncidence34() {
		return incidence34;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setIncidence34(double newIncidence34) {
		double oldIncidence34 = incidence34;
		incidence34 = newIncidence34;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE34, oldIncidence34, incidence34));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getIncidence43() {
		return incidence43;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setIncidence43(double newIncidence43) {
		double oldIncidence43 = incidence43;
		incidence43 = newIncidence43;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE43, oldIncidence43, incidence43));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getDeaths1() {
		return deaths1;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setDeaths1(double newDeaths1) {
		double oldDeaths1 = deaths1;
		deaths1 = newDeaths1;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS1, oldDeaths1, deaths1));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getDeaths2() {
		return deaths2;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setDeaths2(double newDeaths2) {
		double oldDeaths2 = deaths2;
		deaths2 = newDeaths2;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS2, oldDeaths2, deaths2));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getDeaths3() {
		return deaths3;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setDeaths3(double newDeaths3) {
		double oldDeaths3 = deaths3;
		deaths3 = newDeaths3;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS3, oldDeaths3, deaths3));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getDeaths4() {
		return deaths4;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setDeaths4(double newDeaths4) {
		double oldDeaths4 = deaths4;
		deaths4 = newDeaths4;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS4, oldDeaths4, deaths4));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getDeaths12() {
		return deaths12;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setDeaths12(double newDeaths12) {
		double oldDeaths12 = deaths12;
		deaths12 = newDeaths12;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS12, oldDeaths12, deaths12));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getDeaths21() {
		return deaths21;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setDeaths21(double newDeaths21) {
		double oldDeaths21 = deaths21;
		deaths21 = newDeaths21;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS21, oldDeaths21, deaths21));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getDeaths31() {
		return deaths31;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setDeaths31(double newDeaths31) {
		double oldDeaths31 = deaths31;
		deaths31 = newDeaths31;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS31, oldDeaths31, deaths31));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getDeaths41() {
		return deaths41;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setDeaths41(double newDeaths41) {
		double oldDeaths41 = deaths41;
		deaths41 = newDeaths41;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS41, oldDeaths41, deaths41));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getDeaths13() {
		return deaths13;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setDeaths13(double newDeaths13) {
		double oldDeaths13 = deaths13;
		deaths13 = newDeaths13;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS13, oldDeaths13, deaths13));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getDeaths23() {
		return deaths23;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setDeaths23(double newDeaths23) {
		double oldDeaths23 = deaths23;
		deaths23 = newDeaths23;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS23, oldDeaths23, deaths23));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getDeaths32() {
		return deaths32;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setDeaths32(double newDeaths32) {
		double oldDeaths32 = deaths32;
		deaths32 = newDeaths32;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS32, oldDeaths32, deaths32));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getDeaths42() {
		return deaths42;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setDeaths42(double newDeaths42) {
		double oldDeaths42 = deaths42;
		deaths42 = newDeaths42;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS42, oldDeaths42, deaths42));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getDeaths14() {
		return deaths14;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setDeaths14(double newDeaths14) {
		double oldDeaths14 = deaths14;
		deaths14 = newDeaths14;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS14, oldDeaths14, deaths14));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getDeaths24() {
		return deaths24;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setDeaths24(double newDeaths24) {
		double oldDeaths24 = deaths24;
		deaths24 = newDeaths24;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS24, oldDeaths24, deaths24));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getDeaths34() {
		return deaths34;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setDeaths34(double newDeaths34) {
		double oldDeaths34 = deaths34;
		deaths34 = newDeaths34;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS34, oldDeaths34, deaths34));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getDeaths43() {
		return deaths43;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setDeaths43(double newDeaths43) {
		double oldDeaths43 = deaths43;
		deaths43 = newDeaths43;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS43, oldDeaths43, deaths43));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Object eGet(int featureID, boolean resolve, boolean coreType) {
		switch (featureID) {
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E1:
				return getE1();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E2:
				return getE2();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E3:
				return getE3();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E4:
				return getE4();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I1:
				return getI1();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I2:
				return getI2();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I3:
				return getI3();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I4:
				return getI4();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__T1:
				return getT1();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__T2:
				return getT2();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__T3:
				return getT3();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__T4:
				return getT4();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__R1:
				return getR1();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__R2:
				return getR2();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__R3:
				return getR3();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__R4:
				return getR4();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E12:
				return getE12();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E13:
				return getE13();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E14:
				return getE14();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E21:
				return getE21();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E23:
				return getE23();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E24:
				return getE24();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E31:
				return getE31();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E32:
				return getE32();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E34:
				return getE34();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E41:
				return getE41();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E42:
				return getE42();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E43:
				return getE43();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I12:
				return getI12();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I13:
				return getI13();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I14:
				return getI14();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I21:
				return getI21();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I23:
				return getI23();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I24:
				return getI24();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I31:
				return getI31();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I32:
				return getI32();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I34:
				return getI34();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I41:
				return getI41();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I42:
				return getI42();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I43:
				return getI43();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__R:
				return getR();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE1:
				return getIncidence1();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE2:
				return getIncidence2();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE3:
				return getIncidence3();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE4:
				return getIncidence4();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE12:
				return getIncidence12();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE21:
				return getIncidence21();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE31:
				return getIncidence31();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE41:
				return getIncidence41();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE13:
				return getIncidence13();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE23:
				return getIncidence23();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE32:
				return getIncidence32();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE42:
				return getIncidence42();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE14:
				return getIncidence14();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE24:
				return getIncidence24();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE34:
				return getIncidence34();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE43:
				return getIncidence43();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS1:
				return getDeaths1();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS2:
				return getDeaths2();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS3:
				return getDeaths3();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS4:
				return getDeaths4();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS12:
				return getDeaths12();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS21:
				return getDeaths21();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS31:
				return getDeaths31();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS41:
				return getDeaths41();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS13:
				return getDeaths13();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS23:
				return getDeaths23();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS32:
				return getDeaths32();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS42:
				return getDeaths42();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS14:
				return getDeaths14();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS24:
				return getDeaths24();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS34:
				return getDeaths34();
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS43:
				return getDeaths43();
		}
		return super.eGet(featureID, resolve, coreType);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public void eSet(int featureID, Object newValue) {
		switch (featureID) {
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E1:
				setE1((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E2:
				setE2((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E3:
				setE3((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E4:
				setE4((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I1:
				setI1((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I2:
				setI2((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I3:
				setI3((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I4:
				setI4((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__T1:
				setT1((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__T2:
				setT2((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__T3:
				setT3((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__T4:
				setT4((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__R1:
				setR1((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__R2:
				setR2((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__R3:
				setR3((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__R4:
				setR4((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E12:
				setE12((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E13:
				setE13((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E14:
				setE14((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E21:
				setE21((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E23:
				setE23((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E24:
				setE24((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E31:
				setE31((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E32:
				setE32((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E34:
				setE34((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E41:
				setE41((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E42:
				setE42((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E43:
				setE43((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I12:
				setI12((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I13:
				setI13((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I14:
				setI14((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I21:
				setI21((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I23:
				setI23((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I24:
				setI24((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I31:
				setI31((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I32:
				setI32((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I34:
				setI34((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I41:
				setI41((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I42:
				setI42((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I43:
				setI43((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__R:
				setR((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE1:
				setIncidence1((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE2:
				setIncidence2((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE3:
				setIncidence3((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE4:
				setIncidence4((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE12:
				setIncidence12((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE21:
				setIncidence21((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE31:
				setIncidence31((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE41:
				setIncidence41((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE13:
				setIncidence13((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE23:
				setIncidence23((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE32:
				setIncidence32((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE42:
				setIncidence42((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE14:
				setIncidence14((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE24:
				setIncidence24((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE34:
				setIncidence34((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE43:
				setIncidence43((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS1:
				setDeaths1((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS2:
				setDeaths2((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS3:
				setDeaths3((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS4:
				setDeaths4((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS12:
				setDeaths12((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS21:
				setDeaths21((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS31:
				setDeaths31((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS41:
				setDeaths41((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS13:
				setDeaths13((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS23:
				setDeaths23((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS32:
				setDeaths32((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS42:
				setDeaths42((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS14:
				setDeaths14((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS24:
				setDeaths24((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS34:
				setDeaths34((Double)newValue);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS43:
				setDeaths43((Double)newValue);
				return;
		}
		super.eSet(featureID, newValue);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public void eUnset(int featureID) {
		switch (featureID) {
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E1:
				setE1(E1_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E2:
				setE2(E2_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E3:
				setE3(E3_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E4:
				setE4(E4_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I1:
				setI1(I1_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I2:
				setI2(I2_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I3:
				setI3(I3_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I4:
				setI4(I4_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__T1:
				setT1(T1_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__T2:
				setT2(T2_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__T3:
				setT3(T3_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__T4:
				setT4(T4_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__R1:
				setR1(R1_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__R2:
				setR2(R2_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__R3:
				setR3(R3_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__R4:
				setR4(R4_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E12:
				setE12(E12_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E13:
				setE13(E13_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E14:
				setE14(E14_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E21:
				setE21(E21_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E23:
				setE23(E23_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E24:
				setE24(E24_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E31:
				setE31(E31_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E32:
				setE32(E32_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E34:
				setE34(E34_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E41:
				setE41(E41_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E42:
				setE42(E42_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E43:
				setE43(E43_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I12:
				setI12(I12_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I13:
				setI13(I13_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I14:
				setI14(I14_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I21:
				setI21(I21_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I23:
				setI23(I23_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I24:
				setI24(I24_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I31:
				setI31(I31_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I32:
				setI32(I32_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I34:
				setI34(I34_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I41:
				setI41(I41_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I42:
				setI42(I42_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I43:
				setI43(I43_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__R:
				setR(R_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE1:
				setIncidence1(INCIDENCE1_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE2:
				setIncidence2(INCIDENCE2_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE3:
				setIncidence3(INCIDENCE3_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE4:
				setIncidence4(INCIDENCE4_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE12:
				setIncidence12(INCIDENCE12_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE21:
				setIncidence21(INCIDENCE21_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE31:
				setIncidence31(INCIDENCE31_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE41:
				setIncidence41(INCIDENCE41_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE13:
				setIncidence13(INCIDENCE13_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE23:
				setIncidence23(INCIDENCE23_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE32:
				setIncidence32(INCIDENCE32_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE42:
				setIncidence42(INCIDENCE42_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE14:
				setIncidence14(INCIDENCE14_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE24:
				setIncidence24(INCIDENCE24_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE34:
				setIncidence34(INCIDENCE34_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE43:
				setIncidence43(INCIDENCE43_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS1:
				setDeaths1(DEATHS1_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS2:
				setDeaths2(DEATHS2_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS3:
				setDeaths3(DEATHS3_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS4:
				setDeaths4(DEATHS4_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS12:
				setDeaths12(DEATHS12_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS21:
				setDeaths21(DEATHS21_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS31:
				setDeaths31(DEATHS31_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS41:
				setDeaths41(DEATHS41_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS13:
				setDeaths13(DEATHS13_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS23:
				setDeaths23(DEATHS23_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS32:
				setDeaths32(DEATHS32_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS42:
				setDeaths42(DEATHS42_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS14:
				setDeaths14(DEATHS14_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS24:
				setDeaths24(DEATHS24_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS34:
				setDeaths34(DEATHS34_EDEFAULT);
				return;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS43:
				setDeaths43(DEATHS43_EDEFAULT);
				return;
		}
		super.eUnset(featureID);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public boolean eIsSet(int featureID) {
		switch (featureID) {
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E1:
				return e1 != E1_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E2:
				return e2 != E2_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E3:
				return e3 != E3_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E4:
				return e4 != E4_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I1:
				return i1 != I1_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I2:
				return i2 != I2_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I3:
				return i3 != I3_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I4:
				return i4 != I4_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__T1:
				return t1 != T1_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__T2:
				return t2 != T2_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__T3:
				return t3 != T3_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__T4:
				return t4 != T4_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__R1:
				return r1 != R1_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__R2:
				return r2 != R2_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__R3:
				return r3 != R3_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__R4:
				return r4 != R4_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E12:
				return e12 != E12_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E13:
				return e13 != E13_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E14:
				return e14 != E14_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E21:
				return e21 != E21_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E23:
				return e23 != E23_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E24:
				return e24 != E24_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E31:
				return e31 != E31_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E32:
				return e32 != E32_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E34:
				return e34 != E34_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E41:
				return e41 != E41_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E42:
				return e42 != E42_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__E43:
				return e43 != E43_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I12:
				return i12 != I12_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I13:
				return i13 != I13_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I14:
				return i14 != I14_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I21:
				return i21 != I21_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I23:
				return i23 != I23_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I24:
				return i24 != I24_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I31:
				return i31 != I31_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I32:
				return i32 != I32_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I34:
				return i34 != I34_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I41:
				return i41 != I41_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I42:
				return i42 != I42_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__I43:
				return i43 != I43_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__R:
				return r != R_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE1:
				return incidence1 != INCIDENCE1_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE2:
				return incidence2 != INCIDENCE2_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE3:
				return incidence3 != INCIDENCE3_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE4:
				return incidence4 != INCIDENCE4_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE12:
				return incidence12 != INCIDENCE12_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE21:
				return incidence21 != INCIDENCE21_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE31:
				return incidence31 != INCIDENCE31_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE41:
				return incidence41 != INCIDENCE41_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE13:
				return incidence13 != INCIDENCE13_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE23:
				return incidence23 != INCIDENCE23_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE32:
				return incidence32 != INCIDENCE32_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE42:
				return incidence42 != INCIDENCE42_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE14:
				return incidence14 != INCIDENCE14_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE24:
				return incidence24 != INCIDENCE24_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE34:
				return incidence34 != INCIDENCE34_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__INCIDENCE43:
				return incidence43 != INCIDENCE43_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS1:
				return deaths1 != DEATHS1_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS2:
				return deaths2 != DEATHS2_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS3:
				return deaths3 != DEATHS3_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS4:
				return deaths4 != DEATHS4_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS12:
				return deaths12 != DEATHS12_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS21:
				return deaths21 != DEATHS21_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS31:
				return deaths31 != DEATHS31_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS41:
				return deaths41 != DEATHS41_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS13:
				return deaths13 != DEATHS13_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS23:
				return deaths23 != DEATHS23_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS32:
				return deaths32 != DEATHS32_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS42:
				return deaths42 != DEATHS42_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS14:
				return deaths14 != DEATHS14_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS24:
				return deaths24 != DEATHS24_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS34:
				return deaths34 != DEATHS34_EDEFAULT;
			case VectorPackage.DENGUE_MODEL_HOST_LABEL_VALUE__DEATHS43:
				return deaths43 != DEATHS43_EDEFAULT;
		}
		return super.eIsSet(featureID);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public String toString() {
		if (eIsProxy()) return super.toString();

		StringBuffer result = new StringBuffer(super.toString());
		result.append(" (E1: ");
		result.append(e1);
		result.append(", E2: ");
		result.append(e2);
		result.append(", E3: ");
		result.append(e3);
		result.append(", E4: ");
		result.append(e4);
		result.append(", I1: ");
		result.append(i1);
		result.append(", I2: ");
		result.append(i2);
		result.append(", I3: ");
		result.append(i3);
		result.append(", I4: ");
		result.append(i4);
		result.append(", T1: ");
		result.append(t1);
		result.append(", T2: ");
		result.append(t2);
		result.append(", T3: ");
		result.append(t3);
		result.append(", T4: ");
		result.append(t4);
		result.append(", R1: ");
		result.append(r1);
		result.append(", R2: ");
		result.append(r2);
		result.append(", R3: ");
		result.append(r3);
		result.append(", R4: ");
		result.append(r4);
		result.append(", E12: ");
		result.append(e12);
		result.append(", E13: ");
		result.append(e13);
		result.append(", E14: ");
		result.append(e14);
		result.append(", E21: ");
		result.append(e21);
		result.append(", E23: ");
		result.append(e23);
		result.append(", E24: ");
		result.append(e24);
		result.append(", E31: ");
		result.append(e31);
		result.append(", E32: ");
		result.append(e32);
		result.append(", E34: ");
		result.append(e34);
		result.append(", E41: ");
		result.append(e41);
		result.append(", E42: ");
		result.append(e42);
		result.append(", E43: ");
		result.append(e43);
		result.append(", I12: ");
		result.append(i12);
		result.append(", I13: ");
		result.append(i13);
		result.append(", I14: ");
		result.append(i14);
		result.append(", I21: ");
		result.append(i21);
		result.append(", I23: ");
		result.append(i23);
		result.append(", I24: ");
		result.append(i24);
		result.append(", I31: ");
		result.append(i31);
		result.append(", I32: ");
		result.append(i32);
		result.append(", I34: ");
		result.append(i34);
		result.append(", I41: ");
		result.append(i41);
		result.append(", I42: ");
		result.append(i42);
		result.append(", I43: ");
		result.append(i43);
		result.append(", R: ");
		result.append(r);
		result.append(", incidence1: ");
		result.append(incidence1);
		result.append(", incidence2: ");
		result.append(incidence2);
		result.append(", incidence3: ");
		result.append(incidence3);
		result.append(", incidence4: ");
		result.append(incidence4);
		result.append(", incidence12: ");
		result.append(incidence12);
		result.append(", incidence21: ");
		result.append(incidence21);
		result.append(", incidence31: ");
		result.append(incidence31);
		result.append(", incidence41: ");
		result.append(incidence41);
		result.append(", incidence13: ");
		result.append(incidence13);
		result.append(", incidence23: ");
		result.append(incidence23);
		result.append(", incidence32: ");
		result.append(incidence32);
		result.append(", incidence42: ");
		result.append(incidence42);
		result.append(", incidence14: ");
		result.append(incidence14);
		result.append(", incidence24: ");
		result.append(incidence24);
		result.append(", incidence34: ");
		result.append(incidence34);
		result.append(", incidence43: ");
		result.append(incidence43);
		result.append(", deaths1: ");
		result.append(deaths1);
		result.append(", deaths2: ");
		result.append(deaths2);
		result.append(", deaths3: ");
		result.append(deaths3);
		result.append(", deaths4: ");
		result.append(deaths4);
		result.append(", deaths12: ");
		result.append(deaths12);
		result.append(", deaths21: ");
		result.append(deaths21);
		result.append(", deaths31: ");
		result.append(deaths31);
		result.append(", deaths41: ");
		result.append(deaths41);
		result.append(", deaths13: ");
		result.append(deaths13);
		result.append(", deaths23: ");
		result.append(deaths23);
		result.append(", deaths32: ");
		result.append(deaths32);
		result.append(", deaths42: ");
		result.append(deaths42);
		result.append(", deaths14: ");
		result.append(deaths14);
		result.append(", deaths24: ");
		result.append(deaths24);
		result.append(", deaths34: ");
		result.append(deaths34);
		result.append(", deaths43: ");
		result.append(deaths43);
		result.append(')');
		return result.toString();
	}

} //DengueModelHostLabelValueImpl
